*shebang(しばん) [#w0dc1768]

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

#!/usr/local/bin/perl
 #!/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で変わる?詳しい人よろ)

**例 [#xbf94cde]
 #!/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

**変態的な例 [#if7cfec1]
***befunge [#m7a8d61e]
 #!/var/bin/befunge

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

***Quine [#yaa58a90]
以下のプログラムは自分自身のコードを出力するquineとなる
 #!/bin/cat

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS