在BASH命令中使用变量?

时间:2011-03-02 17:09:05

标签: linux bash ubuntu

我有20台机器,每台都运行一个进程。机器命名为:

  

[“machine1”,“machine2”,....,“machine20”]

要检查进程对machine1的处理方式,我从远程计算机发出以下命令:

ssh machine1 cat log.txt

对于machine2,我发出以下命令:

ssh machine2 cat log.txt

同样,对于machine20,我发出以下命令:

ssh machine20 cat log.txt

是否有bash命令允许我使用一个命令查看所有机器的输出?

7 个答案:

答案 0 :(得分:3)

如果机器的编号很好,就像你的例子一样:

for i in {1..20} ; do ssh machine$i cat log.txt; done

如果您有文件中的计算机列表,则可以使用:

cat machinesList.txt | xargs -i ssh {} cat log.txt

答案 1 :(得分:3)

您可以将所有计算机名称存储在数组或文本文件中,然后循环显示它。

declare -a machineList=('host1' 'host2' 'otherHost') # and more...


for machine in ${machineList[@]}
do
    ssh $machine cat log.txt
done

我认为你的机器名字不是'machine1','machine2'等等。

一些链接:

答案 2 :(得分:2)

for i in {1..20}
do
   ssh machine$i cat log.txt
done

答案 3 :(得分:2)

使用loop

for i in {1..20}
do
   ssh machine$i cat log.txt
done

但请注意,您在远程shell会话中运行cat,而不是当前的会话,因此这可能无法按预期运行。试试吧,看看。

答案 4 :(得分:2)

将您的主机放入文件并使用while循环,如下所示。请注意-n上使用ssh标记:

while read host; do ssh -n $host cat log.txt; done < hosts-file

或者,您可以使用PSSH

pssh -h hosts-file -i "cat log.txt"

答案 5 :(得分:2)

我建议使用名为Shmux的程序。尽管有这个名字,但它确实很有效。我用它超过100台机器,效果很好。它还可以优雅地为您处理机器故障,这可能是bash for loop方法的一个缺点。

我认为这个程序最酷的事情是能够为你的命令发出多个线程,允许在所有20台机器上并行运行命令。

答案 6 :(得分:1)

除了使用循环的建议之外,您可能需要查看专为在多个客户端上运行命令而设计的psshdsh等工具。