最终目标是让我的 bash 脚本在多个服务器上执行命令。我几乎已经设置好了。我的 SSH 身份验证正在工作,但是这个简单的 while 循环让我很生气。当我执行 while 循环,读取我的文件以获取主机名时,当我运行
ssh $HOST "uname -a"
但是当我尝试运行另一个 ssh 命令时,
ssh $HOST "oslevel -s"
while 循环提前结束!我想不通。 为什么 while read do 循环在第一个命令中运行得非常好,但在添加第二个命令时却不行?
我有一个名为 hosts.list 的简单文本文件,它有 4 个主机名,每行一个。
$ cat hosts.list
pcced1bip04
pcced1bit04
pcced1bo02
pcced1bo04
$ cat getinfo.bash
#!/bin/bash
set -x
while read HOST
do
echo $HOST
ssh $HOST "uname -a"
#ssh $HOST "oslevel -s"
echo ""
done < hosts.list`
当它运行时,它工作正常。它逐行遍历文件并获取"uname -a"
. 所以一切都很好,对吧?(对不起,我打开了set -x
)。
$ ./getinfo.bash
+ read HOST
+ echo pcced1bip04
pcced1bip04
+ ssh pcced1bip04 'uname -a'
AIX pcced1bip04 1 6 0001431BD400
+ echo ''
+ read HOST
+ echo pcced1bit04
pcced1bit04
+ ssh pcced1bit04 'uname -a'
AIX pcced1bit04 1 6 0001431BD400
+ echo ''
+ read HOST
+ echo pcced1bo02
pcced1bo02
+ ssh pcced1bo02 'uname -a'
AIX pcced1bo02 1 6 0009FE2AD400
+ echo ''
+ read HOST
+ echo pcced1bo04
pcced1bo04
+ ssh pcced1bo04 'uname -a'
AIX pcced1bo04 1 6 0009FE2AD400
+ echo ''
+ read HOST
$
当我启用[ssh $HOST "oslevel -s"] 行时会出现问题。当我这样做时,脚本只读取文件的第一行,然后停止。 为什么不进入其他线路?
$ ./getinfo.bash
+ read HOST
+ echo pcced1bip04
pcced1bip04
+ ssh pcced1bip04 'uname -a'
AIX pcced1bip04 1 6 0001431BD400
+ ssh pcced1bip04 'oslevel -s'
6100-06-02-1044
+ echo ''
+ read HOST
$
如果我的脚本有问题,为什么只使用[ssh $HOST "uname -a"]
while 循环就可以正常工作?