shell中while循環參考ssh命令的坑

來源:互聯網
上載者:User

標籤:shell ssh

原理shell代碼如下:

#!/bin/shcat ../androidsrc | while read linedo        ip=$(echo $line | awk ‘{print $1}‘)        srcdir=$(echo $line | awk ‘{print $2}‘)        destdir=$(echo $line | awk ‘{print $3}‘)        user=$(echo $line | awk ‘{print $4}‘)        port=$(echo $line | awk ‘{print $5}‘)        build=$(echo $line | awk ‘{print $6}‘)        echo $ip"   "$srcdir"   "$destdir"    "$user"    "$port"    "$build        #rsync -av $srcdir "-e ssh -p $port" [email protected]$ip:$destdir        ssh -p $port [email protected]$ip sh $builddone

androidsrc檔案如下

xxx.yyy.zzz.zzz /data/build/xgame2/src/ /data/build/xgame/src/ sggame 61693 /data/build/buildgame.shxxx.yyy.zzz.zzz /data/build/xgame2/src/ /data/build/xgame-ios/src/ sggame 61693 /data/build/buildgame2.shxxx.yyy.zzz.zzz /data/build/xgame2/src/ /data/build/xgame/src/ sggame 61693 /data/build/buildgame.shxxx.yyy.zzz.zzz /data/build/xgame2/src/ /data/build/xgame2/src/ sggame 61693 /data/build/buildgame2.shxxx.yyy.zzz.zzz  /data/build/xgame2/src/ /data/build/xgame/src/ sggame 61693 /data/build/buildgame.shxxx.yyy.zzz.zzz  /data/build/xgame2/src/ /data/build/xgame/src/ sggame 61693 /data/build/buildgame.shxxx.yyy.zzz.zzz /data/build/xgame2/src/ /data/build/xgame/src/ sggame 61693 /data/build/buildgame.shxxx.yyy.zzz.zzz  /data/build/xgame2/src/ /data/build/xgame/src/ sggame 61693 /data/build/buildgame.shxxx.yyy.zzz.zzz /data/build/xgame2/src/ /data/build/xgame/src/ sggame 61693 /data/build/buildgame.shxxx.yyy.zzz.zzz  /data/build/xgame2/src/ /data/build/xgame/src/ root 22 /data/build/buildgame.sh

其中,xxx.yyy.zzz.zzz表示IP地址

    問題來源:在執行這個指令碼之後,發現只執行了第一次,迴圈就中斷了。

    問題解析:經過查詢,發現經過管道或重新導向的androidsrc檔案內容,被ssh -p $port [email protected]$ip sh $build提前吃掉了。

    

最終修改之後如下:

#!/bin/shcat ../androidsrc | while read linedo        ip=$(echo $line | awk ‘{print $1}‘)        srcdir=$(echo $line | awk ‘{print $2}‘)        destdir=$(echo $line | awk ‘{print $3}‘)        user=$(echo $line | awk ‘{print $4}‘)        port=$(echo $line | awk ‘{print $5}‘)        build=$(echo $line | awk ‘{print $6}‘)        echo $ip"   "$srcdir"   "$destdir"    "$user"    "$port"    "$build        #rsync -av $srcdir "-e ssh -p $port" [email protected]$ip:$destdir        ssh -p $port [email protected]$ip sh $build < /dev/nulldone

    

結論:while read時,如果遇到處理標準輸入的命令cat,mail,ssh,grep,sed,awk等等,都應該考慮到這個問題。否則寫shell的時候就是個坑




本文出自 “技術成就未來” 部落格,謝絕轉載!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.