master1: /tmp> cat example.txt
server1 ls
server2 ls
server3 ls
想在下面实现,
master1:/tmp> cat example.txt|while read a b
do
ssh $a $b
done
问题:它只从server1获取输出并退出
答案 0 :(得分:0)
再次尝试将其作为输入文件:
server1 cat
server2 cat
server3 cat
您应该看到以下输出:
server2 cat
server3 cat
为什么呢?因为第一个ssh
命令捕获标准输入并读取直到EOF。当它耗尽时,read
循环也会关闭。
快速解决方法是使用-n
标志告诉ssh
在内部使用/dev/null
stdin。
while read host cmd; do
ssh -n "$host" "$cmd"
done < file
(旁白:Use quotes!)