繁体   English   中英

在BASH命令中使用变量?

[英]using a variable in a BASH command?

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

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

要检查进程在machine1 ,我从远程计算机发出以下命令:

ssh machine1 cat log.txt

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

ssh machine2 cat log.txt

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

ssh machine20 cat log.txt

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

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

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

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

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

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

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


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

我假设你的机器不是名字'machine1','machine2'等。

一些链接:

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

使用循环

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

但请注意,您在远程shell会话中运行cat ,而不是当前的会话,因此这可能不会像您期望的那样完全正常工作。 试试看吧。

将您的主机放在一个文件中并使用while循环,如下所示。 注意在ssh上使用-n标志:

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

或者你可以使用PSSH

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM