我已經編寫了一個簡單的腳本,通過給定的主機列表運行並在這些主機上執行給定的命令。 腳本basiclly的樣子:linux - 如何開始聽stdin並重定向行?
while read host; do
ssh -f [email protected]$host [email protected]
echo < servers
我希望能夠運行腳本,它將啓動「聽」從標準輸入線和在循環,而不是$運行它們@。 該腳本將停止正常終止工作 - ctrl + c ..
任何想法?
我已經編寫了一個簡單的腳本,通過給定的主機列表運行並在這些主機上執行給定的命令。 腳本basiclly的樣子:linux - 如何開始聽stdin並重定向行?
while read host; do
ssh -f [email protected]$host [email protected]
echo < servers
我希望能夠運行腳本,它將啓動「聽」從標準輸入線和在循環,而不是$運行它們@。 該腳本將停止正常終止工作 - ctrl + c ..
任何想法?
如果我讀正確的問題,你想一組命令發送到一堆服務器,所有這些都沿着單獨通過。
爲此,您應該將內部循環包裝在外部讀取循環中;類似於:
while read command; do
while read host; do
ssh -f [email protected]$host "$command"
echo
done < servers
done
運行時,可以鍵入命令並在所有服務器上執行該命令。解決發送給遠程系統的shell轉義字符的問題是開發人員的一個練習。
你的腳本已經在做這個!只要瞭解它是如何工作的 - 只是把它保存到文件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
這是從腳本的命令行獲取ssh的參數,而不是標準輸入。 – chepner
OP需要來自'stdin'的命令,而不是主機。 –
這是否必須在bash? – robert
'do'缺少'done' –