shell中while循环引用ssh命令的坑
2014-07-30 10:33
429 查看
原理shell代码如下:
问题来源:在执行这个脚本之后,发现只执行了第一次,循环就中断了。
问题解析:经过查询,发现经过管道或重定向的androidsrc文件内容,被ssh -p $port $user@$ip sh $build提前吃掉了。
最终修改之后如下:
结论:while read时,如果遇到处理标准输入的命令cat,mail,ssh,grep,sed,awk等等,都应该考虑到这个问题。否则写shell的时候就是个坑
#!/bin/sh cat ../androidsrc | while read line do 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" $user@$ip:$destdir ssh -p $port $user@$ip sh $build doneandroidsrc文件如下
xxx.yyy.zzz.zzz /data/build/xgame2/src/ /data/build/xgame/src/ sggame 61693 /data/build/buildgame.sh xxx.yyy.zzz.zzz /data/build/xgame2/src/ /data/build/xgame-ios/src/ sggame 61693 /data/build/buildgame2.sh xxx.yyy.zzz.zzz /data/build/xgame2/src/ /data/build/xgame/src/ sggame 61693 /data/build/buildgame.sh xxx.yyy.zzz.zzz /data/build/xgame2/src/ /data/build/xgame2/src/ sggame 61693 /data/build/buildgame2.sh xxx.yyy.zzz.zzz /data/build/xgame2/src/ /data/build/xgame/src/ sggame 61693 /data/build/buildgame.sh xxx.yyy.zzz.zzz /data/build/xgame2/src/ /data/build/xgame/src/ sggame 61693 /data/build/buildgame.sh xxx.yyy.zzz.zzz /data/build/xgame2/src/ /data/build/xgame/src/ sggame 61693 /data/build/buildgame.sh xxx.yyy.zzz.zzz /data/build/xgame2/src/ /data/build/xgame/src/ sggame 61693 /data/build/buildgame.sh xxx.yyy.zzz.zzz /data/build/xgame2/src/ /data/build/xgame/src/ sggame 61693 /data/build/buildgame.sh xxx.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 $user@$ip sh $build提前吃掉了。
最终修改之后如下:
#!/bin/sh cat ../androidsrc | while read line do 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" $user@$ip:$destdir ssh -p $port $user@$ip sh $build < /dev/null done
结论:while read时,如果遇到处理标准输入的命令cat,mail,ssh,grep,sed,awk等等,都应该考虑到这个问题。否则写shell的时候就是个坑
相关文章推荐
- shell下在while循环中使用ssh命令的问题
- Linux之Shell脚本while循环ssh登录执行命令
- Shell脚本基础16-while循环中使用sleep命令
- 第3章 shell结构化命令------------(while、until循环,九九乘法表)
- shell中使用while循环ssh时只循环第一行的问题解决
- Linux/shell命令的实际应用——while;do;循环执行脚本
- 第三章:shell结构化命令 for & while循环
- 【Shell】Shell编程之while循环命令
- shell写循环ssh登陆多机执行命令
- shell中使用while循环ssh时只循环第一行的问题解决
- 第3章 shell结构化命令------------(while、until循环,九九乘法表)
- shell中while循环里使用ssh的注意事项
- shell命令while循环中使用sleep命令代码示例
- 第3章 shell结构化命令------------(while、until循环,九九乘法表)
- while read 中使用 ssh 免密执行命令 无法循环的问题
- shell中使用while循环ssh的注意事…
- SSH Secure Shell Client登陆配置服务器mysql命令
- Shell for&while 循环详细总结
- shell脚本下的教你如果运用for,while,unti循环,以及区别l
- Shell while read命令完成用户的交互输入