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

4

1 回答 1

0

将此作为您的输入文件再试一次:

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

(旁白:使用引号!)

于 2013-10-13T02:42:35.403 回答