2011-09-30 6 views
8

別のbashスクリプトAから調達しているbashスクリプトBがあるとします。Bには、変数と関数定義の束があります。 Aは主なドライバスクリプトです。 AとBの上に#!/ bin/bash行が必要ですか?もしあなたがそうしていてもしなければ、どうなるでしょう?あなたは(コマンド./script.shを持つなど)の実行可能ファイルとして直接スクリプトを実行する場合すべてのbashスクリプトにシバンが必要ですか?

+0

ここで答えを得ることができますが、試しましたか? – jman

答えて

10

シェバングは、バイナリ実行可能ファイルと同じ方法でオペレーティングシステムが実行されなければならないこれらのスクリプト、のためだけに必須です。別のスクリプトでソースを指定すると、シバンは無視されます。一方、

一方、スクリプトがソースになっているとしたら、最初にシバンを置くことは禁じられています。

10

シェバングが使用されています。この場合、実行可能な実行可能ファイルをオペレーティングシステムに通知します。

それは必要と例えばbash ./script.shを書いたり、スクリプトを調達します場合は効果がありませんではないです。

+1

...またはスクリプトのソースを指定したとき: –

+1

すでにbashプロンプトが表示されている場合、これは必須ではありません。スクリプトはbashとみなされます(他のシェルは通常、スクリプトも同様であると想定しています) –

1

あなたが特に任意の非SH互換機能を使用して、すべてのスクリプトでシェバングを使用する必要があります。例えばDebianに

、デフォルトシェルはダッシュ(bashのではない)です。 bash-only機能を使用していて、このスクリプトをbashで解釈するように指定していない場合、Linuxでも失敗する可能性があります。 SolarisまたはHP-UXではほぼ確実に失敗します。

ファイルが他のスクリプトのソースのみになる場合は、shebang行は省略できますが、実行可能アクセス権は設定しないでください。また、そのようなファイルの場合は、/ bin/shとの互換性を保つのがよいでしょう。

DashAsBinShを強くお勧めします。

関連する問題