スクリプトに書く #! から始まる1行目(シバン)について
シバンとシェバング
シバンまたはシェバン (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というオプションを渡しているかららしい。(自分の場合、毎回決まったコマンドライン引数で実行させることがほとんどないから気にする必要がなさそう)