2013-07-07 94 views
2

我有一個更復雜的shell腳本的小幫手腳本的集合,儘管這很有效,但我決定由於各種原因而想將它們縮減爲一個腳本。從stdin運行腳本命令,帶有參數

所以我想我會在這裏使用文檔,以便我可以創建「嵌套的」shell腳本以適當地本地或遠程運行。此作品不夠好,我可以做如下:

#!/bin/sh 
nested_script=$(cat << 'NESTED_SCRIPT' 
    # Script commands 
NESTED_SCRIPT 
) 
echo "$nested_script" | sh 

不是最實用的例子,但事實上,我可以把它送到ssh,而不是讓這個非常有用的。

但是,我遇到的問題是,我不知道如何也爲嵌套腳本提供參數,就像我向sh命令添加任何內容,然後將其解釋爲要運行並忽略的文件標準輸入完全。

在我的本地機器,我可以做echo "$script" | sh /dev/stdin "foo" "bar",它會很好地工作,但我不相信我的支持以這種方式使用的/dev/stdin工作遠程機器。

還有其他解決方案嗎?目前我使用sed將參數強制轉換爲腳本字符串,但這不是一個很好的方法。

對於那些想知道的;我試圖這樣做的原因是我的嵌套腳本可能在本地運行,也可能是遠程運行,具體取決於是否提供了主機。我真的不想在遠程主機上創建文件來運行,而只是遠程運行命令,這種方法看起來好像會啓用(如果我可以像我想要的那樣讓它工作)。

回答

5

使用sh -s

echo "$nested_script" | sh -s "foo" "bar" 

你也可以已通過腳本作爲參數與-c

sh -c "$nested_script" -- "foo" "bar" 

這樣就減少了腳本的標準輸入。

+0

啊哈,謝謝!我知道我必須失去一些東西!你對'-c'也是正確的,看起來我現在有很多選項可用於我的所有用例,再次感謝! – Haravikk