自己寫的一個獲取所有遠程服務器數據庫啓動配置信息的bash 腳本,發現循環裏的ssh遠程命令只能執行一次,感覺很奇怪,以前沒這麼使用過,
我的腳本爲
#!/bin/bash ## generate a separated line for i in `seq 0 80` do vv+="#" done #echo $vv;exit ## cat myhost.txt|while read host do echo -e "$host\n" ssh -q -n brucetam@$host "/sbin/chkconfig --list|grep -E \"mysql|mongo\"" #echo -e "###############\n" echo -e "$vv\n" done
網上查詢資料如下爲參考資料,轉載過來當做筆記
以前寫過一個批量ssh的腳本,來批量處理一些東西,不過遇到過一個問題就是while循環只執行一次就退出。
現在又有人問到,就順便記錄一下,測試腳本如下
while read line ;
do
ssh -p20002 $line -o StrictHostKeyChecking=no xxxxxxxxx
done < ip.txt
其中ip.txt裏是需要修改東東的ip列表,每次執行都只執行一次很”奇葩“。以前也不明白後來一個sys哥們他告訴我使用-n可以解決。
不過他說不清爲啥,後來自己 man ssh 發現 -n有如下解釋:
-n Redirects stdin from /dev/null (actually, prevents reading from stdin). This must be used when ssh is
run in the background.
具體意思是說, -n 使得ssh 使的標準輸入重定向爲/dev/null,否則的話ssh會讀取標準輸入(但是對ssh來說,讀取標準輸入的內容並沒有什麼用處)
結合-n 參數解釋剛剛說的while 執行一次的問題:
while 第一次從標準輸入讀取ip.txt 一行開始執行循環 然後執行到ssh ,這個時候ssh 會讀取標準輸入的所有內容但沒任何作用,執行完後依然執行while
循環,這個時候while read line 想讀取標準輸入的內容,發現已經沒有任何內容,故退出這就是我們看到的while只讀取一次的原因。
ps:上述分析純屬個人理解,如有誤導,實屬巧合。
本文轉自http://blog.csdn.net/lidan3959/article/details/20452717