2011-06-14 96 views
4

我试图执行AA bash外壳脚本内的ssh命令应该执行以下步骤:) 1)的ssh到主机 2执行命令 3)打印值命令的 4)重复步骤1 -3 5)出口的bash脚本在bash外壳脚本执行循环内ssh命令

我已经设置了密码到远程主机更少条目,添加的主机键远程主机

我要测试的各种状态在远程主机上运行的httpd进程 在文本文件httpd_process.txt中,我有:

/etc/init.d/httpd状态(停止,启动,热启动)

我做的脚本如下:

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 

我认为通过循环的另一个输入字符串每次从输入文本文件中读取,并向远程主机发出请求。 但是,我所经历的是在第一次请求脚本终止之后。 我是否正确地认为,在发送第一个请求时,它会创建一个子进程,并且一旦该进程完成,我的脚本就完成了,并且不会执行下一个循环。

回答

12

ssh正在消耗stdin。通过-n来防止这种情况发生。

+1

谢谢,这很好。我阅读了关于ssh命令使用的不同标志,但我认为只有在后台运行ssh命令时才会使用-n标志,并且查看脚本时,我没有在后台专门运行该命令? – Roland 2011-06-14 22:48:28

+1

当'ssh'在后台运行时,它必须被使用。当'ssh'在前台运行时,它*可以被使用。 – 2011-06-14 22:50:46