我寫了一個 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
我應該在代碼中添加什么來混合輸出?
uj5u.com熱心網友回復:
對我來說最明顯的方法是將輸出寫入檔案并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,因為那不在你的問題中。我也沒有說明輸出的順序,因為也沒有指定。輸出是否應該在每個主機完成時出現也不是。如果您希望涵蓋這些方面,請改進您的問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/531354.html
標籤:linux重击壳SSH
上一篇:sed分組中缺少字符
