2011-06-14 95 views
4

我試圖執行AA bash外殼腳本內的ssh命令應該執行以下步驟:) 1)的ssh到主機 2執行命令 3)打印值命令的 4)重複步驟1 -3 5)出口的bash腳本在bash外殼腳本執行循環內ssh命令

我已經設置了密碼到遠程主機更少條目,添加的主機鍵遠程主機

我要測試的各種狀態在遠程主機上運行的httpd進程 在文本文件httpd_process.txt中,我有:

/etc/init.d/httpd狀態(停止,啓動,熱啓動)

我做的腳本如下:

while read LINE 
do 
    echo "Httpd Request: $LINE" 
    status=`$LINE` 
    echo "Status: $status" 
    sleep 5 # sleep so that next 
done < /path_name/httpd_process.txt 

exit 0 

我認爲通過循環的另一個輸入字符串每次從輸入文本文件中讀取,並向遠程主機發出請求。 但是,我所經歷的是在第一次請求腳本終止之後。 我是否正確地認爲,在發送第一個請求時,它會創建一個子進程,並且一旦該進程完成,我的腳本就完成了,並且不會執行下一個循環。

回答

12

ssh正在消耗stdin。通過-n來防止這種情況發生。

+1

謝謝,這很好。我閱讀了關於ssh命令使用的不同標誌,但我認爲只有在後臺運行ssh命令時纔會使用-n標誌,並且查看腳本時,我沒有在後臺專門運行該命令? – Roland 2011-06-14 22:48:28

+1

當'ssh'在後臺運行時,它必須被使用。當'ssh'在前臺運行時,它*可以被使用。 – 2011-06-14 22:50:46