使用bash脚本获取多个ssh的顺序输出



我写了一个bash脚本,我没有机会下载pssh。但是,我需要并行运行多个ssh命令。到目前为止还没有问题,但是当我运行ssh命令时,我希望看到远程机器的顺序输出。我的意思是一个ssh有多个输出,它们会被混淆,因为不止一个ssh正在运行。

#!/bin/bash
pid_list=""
while read -r list
do
ssh user@$list 'commands'&
c_pid=$!
pid_list="$pid_list $c_pid"
done < list.txt
for pid in $pid_list
do
wait $pid
done

我应该向代码中添加什么以获得未混合的输出?

对我来说最明显的方法是将输出写入一个文件,并将cat写入末尾的文件:

#!/bin/bash
me=$$
pid_list=""
while read -r list
do
ssh user@$list 'hostname; sleep $((RANDOM%5)); hostname ; sleep $((RANDOM%5))' > /tmp/log-${me}-$list &
c_pid=$!
pid_list="$pid_list $c_pid"
done < list.txt
for pid in $pid_list
do
wait $pid
done
cat /tmp/log-${me}-*
rm  /tmp/log-${me}-* 2> /dev/null

我没有处理stderr,因为这不在你的问题中。我也没有处理输出的顺序,因为它也没有指定。也不知道输出是否应该在每个主机完成时显示。如果你想涵盖这些方面,请改进你的问题。

最新更新