EOF)
がヒアドキュメントの終端ではないからです。
<< EOF
でヒアドキュメントを始めたらEOF
のみの行が出現した時点でヒアドキュメントが終わります。
EOF)
でヒアドキュメントは終わっていないので次の行もヒアドキュメントの続きとして読み込もうとしたが、ヒアドキュメントが終了する前にスクリプト自体が終わっていることに対する警告です。
Like!
バージョンアップ関する作業でShellファイルを触っていますが、まったく同じファイルが元々環境では問題なかったのに新環境では下記の警告が出力していて原因がわからないので分かる方いらしゃれば教えてください。お願い申し上げます。
警告内容:
警告: ヒアドキュメントの * 行目でファイル終了 (EOF) に達しました (`EOF' が必要)
MSG=$(isql -Jutf8 -Uusername -Ppassword -Sservername -Ddbname -2000 -s << EOF 2>&1
PRINT '<<<---- this is test. >>>'
go
UPDATE test_001 set test_id="001",
test_date="20240101"
go
EOF)
上記のソースを元々環境では問題なく実行するが、新しい環境では警告が出力します。
'EOF)'を下記のように修正すると警告は出力しませんが、同じファイルなのにどうして違う結果なのかわかりません。
MSG=$(isql -Jutf8 -Uusername -Ppassword -Sservername -Ddbname -2000 -s << EOF 2>&1
PRINT '<<<---- this is test. >>>'
go
UPDATE test_001 set test_id="001",
test_date="20240101"
go
EOF
)
EOF)
がヒアドキュメントの終端ではないからです。
<< EOF
でヒアドキュメントを始めたらEOF
のみの行が出現した時点でヒアドキュメントが終わります。
EOF)
でヒアドキュメントは終わっていないので次の行もヒアドキュメントの続きとして読み込もうとしたが、ヒアドキュメントが終了する前にスクリプト自体が終わっていることに対する警告です。
前後環境の詳細が不明なので憶測でしかないですが、シェルの構文解析ルールが違うんでしょうね。
@cfl1213141516
Questionerありがとうございました。バージョンの問題でした。
シェル(おそらく Bash)のバージョンの違いに起因していると思われます。手元で試したところ、 Bash 3.2 では警告なく動きますが、 Bash 5.2 では同じ文言の警告が出ます。
@cfl1213141516
Questionerありがとうございました。確かにバージョンの問題でした。
3.2は問題なく終了したが、5.1では警告出ました。
本当にありがとうございました。助かりました。