shell 脚本中while 循环只执行一次的问题
自己寫的一個獲取所有遠程服務器數據庫啟動配置信息的bash 腳本,發現循環里的ssh遠程命令只能執行一次,感覺很奇怪,以前沒這么使用過,
我的腳本為
網上查詢資料如下為參考資料,轉載過來當做筆記
以前寫過一個批量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
轉載于:https://blog.51cto.com/brucetam/1643791
總結
以上是生活随笔為你收集整理的shell 脚本中while 循环只执行一次的问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Leetcode#206Reverse
- 下一篇: 3997: [TJOI2015]组合数学