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文書区切り文字を引用しないでください。