1. ホーム
  2. シェル

構文エラー:シェルのファイルの予期せぬ終了

2022-02-25 01:56:22

次のようなシェルを書いたら、syntax error: unexpected end of file で実行されました。

while true



する



  sqlplus / as sysdba << EOF!



  select sysdate from dual;



これでは、先頭行にEOFが書けない!?



完了

次のEOF! を先頭行に書かなければならないことが判明した。もし、loop! EOFはどこに書いても良いのですが、ループがHere Documentsに属している場合、このEOF! はHere Documentsの終わりを表しているのです。SHELLでは、EOF! はその行に現れる唯一の内容でなければならず、空白であってはならないと規定されているので、Cプログラムのように美観のためにEOF! を右へインデントすることはできません。したがって、このEOF! はこの行で一時的に強調表示される。

ループを削除して直接書き込むと実行可能です。

sqlplus / as sysdba << EOF!



  select sysdate from dual;



 EOF! # 先頭が空白でも、空白でなくても影響なし





再投稿 http://www.tanyangxf.net/2011/05/shell%E4%B8%AD%E5%87%BA%E7%8E%B0syntax-error-unexpected-end-of-file/