shell 使用bash脚本实现多ssh的顺序输出

b5buobof  于 2022-11-16  发布在  Shell
关注(0)|答案(1)|浏览(196)

我写了一个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

我应该在代码中添加什么才能得到未混合的输出?

2guxujil

2guxujil1#

对我来说,最明显的方法是将输出写在一个文件中,并在最后写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,因为它不在你的问题中。我也没有处理输出的顺序,因为它也没有指定。也没有处理输出是否应该在每个主机完成时显示。如果你想涵盖这些方面,请改进你的问题。

相关问题