3

スクリプトをリモートで実行する必要があります。次のシェルスクリプトを使用しています

    for server in $servers
     do
     LOCAL_VAR=<some_value>
     ssh $server <<EOF
      command1 $LOCAL_VAR
      command2..
      ..
      exit
      EOF
    done

bashは、予期しないファイルの終わり構文エラーを示します。このブロックを削除すると、残りのコードは正常に機能します。スクリプトをリモートで実行する正しい方法を教えてください。

4

3 に答える 3

2

そのようなインデントをに入れたい場合は、次のようなコードhere-docを追加する必要があります。-

for server in $servers
do
    LOCAL_VAR=<some_value>
    ssh $server <<-EOF
    command1 $LOCAL_VAR
    command2..
    ..
    exit
    EOF
done

これをコピーして貼り付けるときは注意してください。タブやスペースでサプライズが発生する場合があります。

于 2012-10-08T21:32:45.507 に答える
1

ヒアドキュメントを閉じるためのEOFには、先頭にスペースを入れてはなりません。Bashは、スクリプトの終わりを見つける前に、文字列の終わりに到達したとは見なしません。

http://tldp.org/LDP/abs/html/here-docs.html

ヒアドキュメントの最終行にある終了制限文字列は、最初の文字位置から開始する必要があります。先頭の空白はありません。制限文字列の後に空白を付けると、同様に予期しない動作が発生します。空白は、制限文字列が認識されないようにします。

于 2012-10-08T21:29:29.017 に答える
1

解決策は、スクリプトの列1にリテラルラベルを付けることです。tl; drリテラルラベル(EOF)のインデントなし

于 2012-10-08T21:47:47.447 に答える