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 获取输出并退出
将此作为您的输入文件再试一次:
server1 cat
server2 cat
server3 cat
您应该看到以下输出:
server2 cat
server3 cat
为什么?因为第一个ssh
命令是捕获标准输入并读取直到 EOF。当它用尽时,read
循环也会关闭。
一个快速的解决方法是使用-n
标志来告诉ssh
在内部使用/dev/null
标准输入。
while read host cmd; do
ssh -n "$host" "$cmd"
done < file
(旁白:使用引号!)