2012-06-24 24 views
0

我已經編寫了一個簡單的腳本,通過給定的主機列表運行並在這些主機上執行給定的命令。 腳本basiclly的樣子:linux - 如何開始聽stdin並重定向行?

while read host; do 
    ssh -f [email protected]$host [email protected] 
echo < servers 

我希望能夠運行腳本,它將啓動「聽」從標準輸入線和在循環,而不是$運行它們@。 該腳本將停止正常終止工作 - ctrl + c ..

任何想法?

+0

這是否必須在bash? – robert

+2

'do'缺少'done' –

回答

2

如果我讀正確的問題,你想一組命令發送到一堆服務器,所有這些都沿着單獨通過。

爲此,您應該將內部循環包裝在外部讀取循環中;類似於:

while read command; do 
    while read host; do 
     ssh -f [email protected]$host "$command" 
     echo 
    done < servers 
done 

運行時,可以鍵入命令並在所有服務器上執行該命令。解決發送給遠程系統的shell轉義字符的問題是開發人員的一個練習。

0

你的腳本已經在做這個!只要瞭解它是如何工作的 - 只是把它保存到文件some.bash:

user="myuser" 
while read host; do 
    ssh -f [email protected]$host [email protected] 
done 

$ @手段加命令行其餘的參數,如果你使用了一個,它將添加無

讀主機會閱讀該行 - 不只是單詞。

因此,基本上,當你運行它:

www.somehost.com 
--> ssh -f [email protected] 
www.somehost.com other parameters 
--> ssh -f [email protected] other parameters
+0

這是從腳本的命令行獲取ssh的參數,而不是標準輸入。 – chepner

+0

OP需要來自'stdin'的命令,而不是主機。 –