2

いくつかのスクリプトを更新するマシンがいくつかあります。リストから IP を読み取り、それらに対して scp を呼び出すための 1 つの while ループで構成される、私の側の小さな bash スクリプトでこれを行うことができます。正常に動作しますが、更新されたスクリプトをループで実行しようとすると、ループ自体は正常に実行されますが、ループが中断されます。

#!/bin/bash

cat ip_list.txt | while read i; do
    echo ${i}
    scp the_script root@${i}:/usr/sbin/ # works ok
    ssh root@${i} /usr/sbin/the_script  # works for a first IP, then breaks
done

これはどのように機能すると思われますか?もしそうなら、どうすればループを壊さずに ssh 経由でスクリプトをリモートで実行できますか?

4

2 に答える 2

7

これを使って:

ssh -n root@${i} /usr/sbin/the_script  # works for a first IP, then breaks

この-nオプションはssh、標準入力から読み取らないように指示します。それ以外の場合は、stdin を読み取り、それをネットワーク接続に渡します。これにより、残りの入力パイプが消費されます。

于 2013-05-16T10:35:11.873 に答える
1

このようにssh行を変更する必要があります

ssh root@${i} /usr/sbin/the_script  < /dev/null # works for a first IP, then breaks
于 2013-05-16T10:36:11.810 に答える