0

ファイルをスキャンする次のスクリプトがあります。各行はリモートノードのホスト名です。

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

これにより、3行@node1 @node2@node3正しく生成されます。しかしssh、ループ内に追加すると、次のようになります

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

sshループは、 and のみを最初に呼び出した後に中断されます( and@node1なし)。@node2`@node3

舞台裏で何が起こったのか尋ねています(未定義の動作のように見えます)?また、while ループを壊さずに同じ機能を実現するにはどうすればよいでしょうか。

4

1 に答える 1

4

SSH は stdin (からリダイレクトされます) で何かを行っておりtempfile、s を台無しにしていreadます。標準入力をリダイレクトしてみてください。

ssh -n $aline 'jps'

からman ssh:

-n /dev/null から stdin をリダイレクトします (実際には、stdin からの読み取りを防ぎます)。

于 2013-04-16T19:35:25.347 に答える