#!/bin/bash
シェルスクリプトファイルの最初のshebang()行が必要で、この行がないとファイルが正しく実行されないと聞きました。しかし、いくつかのスクリプトをテストしました。その線なしでうまく動作します。
この行はただのコメントですか? bashは他のコメントのようにこの行を省略しますか?それとも、bashはそれを解釈しますか?
行はその形式でなければなりませんか?それとも読めるだけの便利なコメントですか? 、なしで別の方法で表現したらどうでしょうか!
?
ベストアンサー1
カーネル1自体はこれを知っています。 shebangがあるはずです。それ以外の場合、カーネルはそのファイルを実行可能ファイル(スクリプト)と見なします。
Linuxでは、exec
システムコール(別名execve
)は次のコードを呼び出します。 linux/fs/binfmt_script.c
。
static int load_script(struct linux_binprm *bprm)
{
[...]
if ((bprm->buf[0] != '#') || (bprm->buf[1] != '!'))
return -ENOEXEC;
ただし、shebangがない場合、シェルはファイル自体を実行することを選択できます。バラより 最初にshebang行()がないとき、どのシェルがスクリプトを実行しますか?#!/path/to/shell
したがって、シェルスクリプトでは動作しているように見えますが、依存する必要のある機能ではありません。
しかし、シェルスクリプトがbashismを使用している場合はどうなりますか?#!/bin/bash
その後、他のシェルではなくbashで実行する必要があります。同様に、実行したいプログラム自体がシェルでない場合でも実行されます。 PerlやPythonなど、まったく異なる言語で書かれたスクリプトもあります。 shebang がなければ、システムはこれらのタスクにどの通訳者を使用すべきかを知ることができません。
______________
1 これは Unixの機能です。方法Linuxの前に参照してください。シェルボーンの歴史。