在循环中执行bash shell脚本中的ssh命令

4
我正在尝试在bash shell脚本中执行ssh命令,应该执行以下操作: 1)ssh到主机 2)执行命令 3)打印命令值 4)重复步骤1-3 5)退出bash shell脚本
我已经设置了无密码登录到远程主机,并添加了主机密钥。
我想测试运行在远程主机上的httpd进程的各种状态。 在一个文本文件httpd_process.txt中,我有:
/etc/init.d/httpd status (stop, start, restart)
在脚本中我做如下操作:
while read LINE
do
    echo "Httpd Request: $LINE"
    status=`$LINE`
    echo "Status: $status"
    sleep 5 # sleep so that next 
done < /path_name/httpd_process.txt

exit 0

我以为每次循环会从输入文本文件中读取另一个输入字符串并向远程主机发出请求。然而,我的经验是在第一次请求后脚本终止了。 我是否正确地假设,当第一个请求被发送时,它会创建一个子进程,一旦该进程完成,我的脚本就完成了,并且不会执行下一次循环?
1个回答

12

ssh正在消耗标准输入。使用-n参数可以防止这种情况。


1
谢谢,那个方法非常有效。我了解了 ssh 命令使用的不同标志,但我认为 -n 标志只在后台运行 ssh 命令时使用,在查看我的脚本时,我没有特别将命令放到后台运行? - Roland
1
ssh在后台运行时,必须使用它。当ssh在前台运行时,可以使用它。 - Ignacio Vazquez-Abrams

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接