shebang(しばん)

Unix系OSでスクリプトの1行目に書くヤツ。

#!/usr/local/bin/perl

#!から始まる行のことをshebang lineという。 #!以降のパスでプログラムを実行、オプションも指定できる。そのスクリプトを実行したときの実行時引数を実行時引数に加える。 たとえば

#!/usr/bin/aaa -op1

とかいたスクリプトをbbbとし、

$ ./bbb -op2

と実行すると、実際には

$ /usr/bin/aaa -op1 ./bbb -op2

と実行されたことになる。

そのため多くのスクリプト言語では#以降をコメントアウトとする(shebang lineを無視するため)。

Unix系OSの場合。実行許可されたファイルを実行した場合、elfその他の実行形式の場合、そのbinfmt?で実行する。 shebang lineを見つけた場合。上記のような振る舞いをする(binfmt_script等々)。 Windows環境においてはただのおまじないになってしまう。(cygwinで変わる?詳しい人よろ)

#!/usr/local/bin/perl
#!/usr/bin/perl

環境によって異なるため、envがある環境では以下のようにもできる。

#!/usr/bin/env perl

最近のOSはパッケージ管理が付いているので、多くの場合スクリプト言語のプログラム(ruby, perl, python)は/usr/binにある。 手動インストールした場合は、configureで指定しなかった場合/usr/local/binになることが多い。

sh, sedなどは/binにあることがおおい。

#!/bin/sh
#!/bin/sed

プログラムのパスが分からないときは、whichコマンドを使うとよい。

$ which perl
/usr/bin/perl

変態的な例

befunge

#!/var/bin/befunge

befungeでは#に意味がある(次の文字を読み飛ばす)のでそれ以降を無視できないため この様にする。/で割り算、vで読み込みの方向が下に向く。

Quine

以下のプログラムは自分自身のコードを出力するquineとなる

#!/bin/cat