3

複数のリモートマシンにログインし、各マシン内でスクリプトを実行するループがあるスクリプトを作成しようとしています。次に例を示します。

for ((j=1; j < 2; j++)); do 

  mchname="n"$j

  ssh -T $mchname <<'ENDSSH'    
    ./run_script < input > output &    
  ENDSSH

done

上記のスクリプトを実行しようとすると、「警告: ファイルの終わりで区切られた 37 行目のヒアドキュメント (`ENDSSH' が必要)」というメッセージが表示されます。

私はsshを初めて使用するので、ばかげた間違いを犯していると確信しています。誰かが私に解決策を提案できますか? ありがとう。

4

1 に答える 1

13

bashスクリプトに問題があります。ヒアドキュメントの終了タグ(スクリプトのENDSSH)はインデントできません。

代わりにこれを試してください:

  ssh -T $mchname <<'ENDSSH'    
    ./run_script < input > output &    
ENDSSH
# ^ no indentation for that line

編集:

また、コマンドを標準入力として提供するのではなく、引数としてsshに渡すことにより、リモートシステムでコマンドを実行できます。コマンドは、ユーザーのリモートシェルによって実行されます。

ssh -T $mchname './run_script < input > output &'
于 2012-06-23T20:46:44.140 に答える