標籤: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的時候就是個坑
本文出自 “技術成就未來” 部落格,謝絕轉載!