最终目标是让我的 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 循环中?