shell读取传递for或while循环中的两个变量和多个主机中的ssh

时间:2013-10-13 02:32:02

标签: shell ssh

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获取输出并退出

1 个答案:

答案 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!)