2016-04-13 16 views
0

私はシェルスクリプトを書いていて、それをPOSIX互換にします。私は、シェルスクリプトがシェバング(#!)で始めなければならないという印象の下に常にだったが、私はthisオンラインが見つかりました:「!#」シェルコマンドのファイルの最初の行は文字で始まる場合POSIX互換シェルスクリプト:シバンで始める?

を、結果は不特定である。

スクリプトを#!行で開始する必要がありますか、それともPOSIXに準拠させたいのですか?

+1

私はそれがシバンラインが最初に機能することを可能にする仕様言語だと思います。シバンラインについてのより多くの情報はhttp://www.in-ulm.de/~mascheck/various/shebang/で読むことができます。 –

答えて

0

状況が変化します。 は、表示されていない(#!)スクリプトではBourneシェルを実行することはできませんが、今ではそれは指定されていません。

#!が存在しない場合、KornシェルとBashの「最近の」バージョン(つまり、bashまたはkshのいずれか)が実行されます。ただし、zshsh(POSIXシェル)を実行します。したがって、スクリプトを実行するシェルに依存します。

シェルでない場合、Cレイヤーはexecve(またはその変形)を呼び出します。 GNU版のは、次のように書かれています:

"execve()は、バイナリ実行可能ファイルでなければなりません。フォームの行: - 確実性のために支払うために小さな価格ですは「

#! interpreter [optional-arg] 

私のアドバイスはいつも#!ラインを供給することです。何らかの理由で行が必要でない場合は、#を開始するので、コメントにすぎません。

+0

POSIXはおそらく、(1番目と2番目の段落で説明したように)動作の歴史的な矛盾を明確にすることを決め、ユーザーがシステムとシェルの間で一貫した動作を期待しないように「不定」と宣言しました。 POSIXは共通点に集中する傾向があり、多くの場合、OS間でコンセンサスがない領域は除外されます。 – Dummy00001

関連する問題