[英]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台机器上并行运行命令。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.