0

我有以下脚本扫描文件,每一行都是远程节点的主机名。

echo -e "node1\nnode2\nnode3" > tempfile
while read aline; do
  echo "@$aline";  
done < tempfile

这会在三行中正确@node1 @node2生成。@node3但是当我ssh在循环内添加时,如下

while read aline; do
  echo "@$aline"; 
  ssh $aline 'jps';  
done < tempfile

循环将在第一次调用sshand 后中断,并且只打印@node1(没有@node2and `@node3)。

我在问幕后发生了什么(看起来像是未定义的行为)?以及如何在不破坏 while 循环的情况下实现相同的功能。

4

1 回答 1

4

SSH 正在使用标准输入(从 重定向tempfile)并弄乱了reads. 尝试重定向标准输入。

ssh -n $aline 'jps'

来自man ssh

-n 从 /dev/null 重定向标准输入(实际上,阻止从标准输入读取)。

于 2013-04-16T19:35:25.347 回答