shell中while循环里使用ssh的注意事项
2014-10-22 11:08
519 查看
#!/bin/bash cat file1 | while read LINE do echo "this is $LINE" ssh -lroot -p22 192.168.10.169 "df -h" done上述脚本期望实现的功能是:读取一个有多行内容的文件file1,每打印一行之后就用ssh远程执行显示远程主机的磁盘分区使用情况。
实际执行结果:只打印了第一行和执行了一次ssh命令,脚本就退出了。
案例原因解析:while中使用重定向机制,file1文件中的信息都已经读入并重定向给了整个while语句,所以当我们在while循环中再一次调用read语句,就会读取到下一条记录,但是,因为ssh会读取存在的缓存,调用完ssh语句后,输入缓存中已经都被读完了,当read语句再读的时候当然也就读不到纪录,循环也就退出了。
解决方法:对ssh使用输入重定向,而防止它去读while的缓存,或者使用for循环避免使用重定向的方式。代码如下:
#!/bin/bash # cat file1 | while read LINE do echo "this is $LINE" ssh -lroot -p22 192.168.10.169 "df -h" < /dev/null done
#!/bin/bash # for LINE in `cat file1` do echo "this is $LINE" ssh -lroot -p22 192.168.10.169 "df -h" done
本文出自 “逻辑,追求!” 博客,请务必保留此出处http://hjh524.blog.51cto.com/4248253/1566613
相关文章推荐
- shell中使用while循环ssh的注意事…
- shell下在while循环中使用ssh命令的问题
- shell中使用while循环ssh时只循环第一行的问题解决
- shell中使用while循环ssh时只循环第一行的问题解决
- 使用while循环的注意事项:
- Linux之Shell脚本while循环ssh登录执行命令
- [循环队列]使用原因与注意事项
- shell中使用判断符号[ ]的注意事项
- 循环使用summit调用另外一个报表时,注意事项
- while语句的使用注意事项
- 使用Objective-C中foreach循环的一大注意事项
- THinkPHP在模板中的volist循环使用外部变量注意事项
- shell中while循环引用ssh命令的坑
- SSH、Tunnel功能使用注意事项
- 使用ssh密钥的方式连接linux服务器的注意事项
- Makefile中使用shell注意事项
- 使用Objective-C中foreach循环的一大注意事项
- Delphi中for、while 使用注意事项
- linux下使用ssh管理VPS的注意事项小结
- 使用Objective-C中foreach循环的一大注意事项