EOTを使用してファイルの複数行をエコーし​​ます。

EOTを使用してファイルの複数行をエコーし​​ます。

EOTを使用してファイルに複数行を書きたいのですが、次のスクリプトは次のとおりです。

#!/bin/bash
bench="X"
file_name="submit2.sh"
ids=(55)
for id in "${arrayName[@]}"; do
    cat <<'EOT' >> $bench/$file_name
    #!/bin/bash -l
    #PBS -l nodes=1:ppn=1
    echo $id
    EOT
done              # line 11

このエラーが発生します

line 11: warning: here-document at line 6 delimited by end-of-file (wanted `EOT')
line 12: syntax error: unexpected end of file

この問題をどのように解決できますか?

ベストアンサー1

ここで、文書の閉じ区切り記号は行の最初の行でなければなりません。

for ...; do
    cat <<END_SUBMIT_SCRIPT
#!/bin/bash

... 
...

END_SUBMIT_SCRIPT
done

コミットスクリプトを生成するスクリプトから行をインデントするには、行の先頭にリテラルタブを使用して<<-DELIMITERを使用してリダイレクトします。

for ...; do
    cat <<-END_SCRIPT
        #!/bin/bash
        ...
        ...
        END_SCRIPT
done

-inを使用すると、ここのドキュメントのすべての行からすべての初期タブ文字(スペースではない)が削除されます<<-。また、上記のように閉じる区切り文字をインデントすることもできます。

また、here文書内の変数を拡張する場合は、here文書区切り文字を引用しないでください。

おすすめ記事