0

sctiptにwhileループを含む次のコードがあります:

TMP_FILE=`mktemp`
some_script.sh | grep aa > $TMP_FILE 
while read i
   do
      echo $i
      number=`ssh somehost cat somefile | grep 11 `  
      echo $number
   done < $TMP_FILE

TMP_FILEの内容は次のようになります。

hostname1 AB_CDEF_JH10
hostname2 BC_DEF_JK19
...

この場合、スクリプトは1つのループパスでのみ正しく機能し、TMP_FILEから最初の行を取得します。その後、スクリプトを終了します。最初の行以外の他の行を処理したくない理由はありますか?

4

1 に答える 1

3

-nオプションを渡して、sshstdinから読み取れないようにしてください。

デフォルトでsshは、stdin(この場合はファイル)から読み取り、リモートホストで実行されているコマンドのstdinに転送します。その結果、ファイル全体が消費されssh、ループは1回だけ実行されます。

于 2012-09-25T10:28:02.150 に答える