LoginSignup
cfl1213141516
@cfl1213141516 (Sai HR)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

(`EOF' が必要)

警告: ヒアドキュメントの * 行目でファイル終了 (EOF) に達しました (`EOF' が必要)

バージョンアップ関する作業でShellファイルを触っていますが、まったく同じファイルが元々環境では問題なかったのに新環境では下記の警告が出力していて原因がわからないので分かる方いらしゃれば教えてください。お願い申し上げます。

警告内容:

警告: ヒアドキュメントの * 行目でファイル終了 (EOF) に達しました (`EOF' が必要)

Shell

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
)
0

2Answer

EOF)がヒアドキュメントの終端ではないからです。
<< EOFでヒアドキュメントを始めたらEOFのみの行が出現した時点でヒアドキュメントが終わります。

EOF)でヒアドキュメントは終わっていないので次の行もヒアドキュメントの続きとして読み込もうとしたが、ヒアドキュメントが終了する前にスクリプト自体が終わっていることに対する警告です。

2

Comments

  1. 前後環境の詳細が不明なので憶測でしかないですが、シェルの構文解析ルールが違うんでしょうね。

  2. @cfl1213141516

    Questioner

    ありがとうございました。バージョンの問題でした。

シェル(おそらく Bash)のバージョンの違いに起因していると思われます。手元で試したところ、 Bash 3.2 では警告なく動きますが、 Bash 5.2 では同じ文言の警告が出ます。

2

Comments

  1. @cfl1213141516

    Questioner

    ありがとうございました。確かにバージョンの問題でした。
    3.2は問題なく終了したが、5.1では警告出ました。
    本当にありがとうございました。助かりました。:thumbsup_tone1:

Your answer might help someone💌