2017-11-26 7 views
0

の終わりで区切られた文書私は バッシュスクリプト警告 - HEREファイル

以下
#!/usr/bin/env bash 

cat <<'VERBATIM_SQL' 
INSERT INTO t_random VALUES (generate_series(1,9999999999), md5(random()::text)); 
VERBATIM_SQL 

ようなSQLファイルを持っているが、SQLファイルは以下のように呼ば取得されたシェルスクリプトから

#!/usr/bin/env bash 

./insert.sql | psql -U postgres -p 5432 -h localhost -d vnera 
./insert.sql | psql -U postgres -p 5432 -h localhost -d vnera 
./insert.sql | psql -U postgres -p 5432 -h localhost -d vnera 

Iを実行するには下記のような警告が表示されます

Loop 1./insert.sql: line 5: warning: here-document at line 3 delimited by end-of-file (wanted `VERBATIM_SQL') 

この警告が表示される理由を教えてもらえますか?

EDIT

は、私がコメント

[email protected]:~/postgres_junk$ dos2unix insert.sql 
dos2unix: converting file insert.sql to Unix format ... 

の1で提案されたものでした。しかし、まだ

./insert.sql: line 5: warning: here-document at line 3 delimited by end-of-file (wanted `VERBATIM_SQL') 
+0

これは役立つかもしれない:特にhttps://stackoverflow.com/q/18660798/3776858 – Cyrus

+2

を、あなたのファイルは、Windowsの行末を持っていないことを確認してください。 – rici

+0

一貫して使用されていない限り、DOSの行末はこの問題を引き起こしません。 'VERBATIM_SQL \ r'は有効な区切り文字で、両方の場所で使用されます。 – chepner

答えて

0

シェルは、彼らが受け入れるかについて非常にうるさいです同じ警告を取得しますここで文書の終了として。提供されたトークンと正確に一致する必要があります。特に、あなたはそれをチェックする必要があります:

  • 終了ラインが終了ラインには末尾の空白はありません、Windowsの行末

  • を持っていません。 (また、インデントしてはいけません。)