while循环中碰到ssh的话,如何避免退出

简介:
先看一个例子:
#!/bin/sh
. /root/.bash_profile
cat /home/yejr/alldb|while read LINE
do
   #取得IP和组号
   IP=`echo $LINE | awk '{print $1}'`
   NU=`echo $LINE | awk '{print $2}' | awk -F '-' '{print $1}'`
   cnt=`ssh root@$IP "mysql -e 'select count(*) from yejr.tbl1'|tail -n 1"`
   echo "$IP $NU $cnt"
done
看起来没有问题吧,实际上,执行的时候只循环了一次,就退出while循环了,为什么呢?
这是因为ssh需要从输入终端来读取数据,在第一次循环时ssh就把 read 读到的数据也给读取了,相当于是被他"吃"了.
解决办法是,指定 ssh 的输入终端,有3种方法:
ssh -f
-f Requests ssh to go to background just before command execution.  This is useful if ssh is going to ask for
   passwords or passphrases, but the user wants it in the background.  This implies -n.  The recommended way to
   start X11 programs at a remote site is with something like ssh -f host xterm.
或者:
ssh -n
-n Redirects stdin from /dev/null (actually, prevents reading from stdin).  This must be used when ssh is run in
   the background.  A common trick is to use this to run X11 programs on a remote machine.  For example, ssh -n
   shadows.cs.hut.fi emacs & will start an emacs on shadows.cs.hut.fi, and the X11 connection will be automati-
   cally forwarded over an encrypted channel.  The ssh program will be put in the background.  (This does not
   work if ssh needs to ask for a password or passphrase; see also the -f option.)
或者,将ssh放到后台中执行. 以下是几种写法的综合:
 

cnt=`ssh root@$IP "mysql -e 'select count(*) from yejr.tbl1'|tail -n 1"



本文转自叶金荣51CTO博客,原文链接:http://blog.51cto.com/imysql/308604,如需转载请自行联系原作者

相关文章
|
安全 网络安全
配置SSH服务远程连接空闲超时退出时间(包括SSH无法登录、登录缓慢)
配置SSH服务远程连接空闲超时退出时间(包括SSH无法登录、登录缓慢)
659 0
|
安全 网络安全
配置SSH服务远程连接空闲超时退出时间
配置SSH服务远程连接空闲超时退出时间
|
网络安全 Shell
如何避免远程循环执行SSH时,到第一条之后就退出
RT 今天遇到的小问题,记录下来。 据说关键是加  < /dev/null 我也是看网上别人说的,测试成功。 #!/bin/bash while read line do echo $line ssh -l wls81 $line "cp -r /appsystems/ /appsystems.
1147 0
|
2月前
|
Linux 网络安全 Docker
盘古栈云,创建带ssh服务的linux容器
创建带ssh服务的linux容器
279 146
|
5月前
|
监控 Linux 网络安全
FinalShell SSH工具下载,服务器管理,远程桌面加速软件,支持Windows,macOS,Linux
FinalShell是一款国人开发的多平台SSH客户端工具,支持Windows、Mac OS X和Linux系统。它提供一体化服务器管理功能,支持shell和sftp同屏显示,命令自动提示,操作便捷。软件还具备加速功能,提升访问服务器速度,适合普通用户和专业人士使用。
1358 0
|
8月前
|
安全 Linux 网络安全
在Linux(CentOS和AWS)上安装更新的git2的方法并配置github-ssh
经过以上这些步骤,你现在就能在GitHub上顺利往返,如同海洋中的航海者自由驰骋。欢迎你加入码农的世界,享受这编程的乐趣吧!
329 10
|
安全 Linux Shell
Linux中SSH命令介绍
Linux中SSH命令介绍
591 2