スクリプトに書く #! から始まる1行目(シバン)について

シバンとシェバング

シバン(Unix) - Wikipedia

シバンまたはシェバン (shebang) とはUNIXスクリプトの#!から始まる1行目のこと。起動してスクリプトを読み込むインタプリタを指定する。 hash-bangまたはshell-bang、sharp-bangとも言うが、これらを縮めたshebangという呼び方が一般的かつシンプルである。

シェバング - UNIXの部屋 コマンド検索: shebang

この「#!」のことを「シェバング」(shebang) と呼ぶ。また、この行全体を「シェバング行」と呼ぶこともある。

シェバングの役割

シェバング - UNIXの部屋 コマンド検索: shebang

コンピュータが直接解釈できるのはマシン語だけである。しかし UNIX では、ファイルの先頭 2バイトが「#!」であった場合は、その後に記述されている別のコマンドを実行しようとする。

使い方

Ruby/usr/bin/rubyにインストールされているなら、以下のように書いてhoge.rbとして保存すると、シェルから./hoge.rbのように実行できる

#! /usr/bin/ruby

シェバングはrubyコマンドを使ってスクリプトを実行するときも解釈される。これを利用してRubyスクリプトに毎回決まったコマンドライン引数で実行させることもできる。つまり以下のように書くと、毎回-Keオプションを指定して実行することになる。

#! /usr/bin/ruby -Ke

#! /usr/bin/rubyと書いた場合、環境が違うと実行できない。なぜなら、Ruby/usr/bin/rubyにあるとは限らない。Ruby/usr/local/bin/rubyにあることもある。そこで以下のようにenvが使われる。

#! /usr/bin/env ruby

しかし、#! /usr/bin/env rubyとした場合、インタプリンタにコマンドライン引数としてオプションを渡すことができない。なぜなら、シェバングに渡すことができるオプションは1つだけで、envにはrubyというオプションを渡しているかららしい。(自分の場合、毎回決まったコマンドライン引数で実行させることがほとんどないから気にする必要がなさそう)