Ruby Tips!

RubyのTipsを紹介します

shebangでRubyスクリプトを実行可能にする

Unixライクなシステムでは、先頭行に#!を書くことで、スクリプトを任意のプログラムで実行するように指定することができる。これをshebangと呼ぶ。

例えばRuby/usr/bin/rubyにインストールされているシステムなら、先頭行に以下のように書いてhello.rbとして保存し、実行権限を付与してやれば、このスクリプトをシェルから./hello.rbのように実行することができる。

#! /usr/bin/ruby
puts "Hello, World!"

shebangrubyコマンドを使ってスクリプトを起動するときにも解釈される。これを利用してRubyスクリプトをいつも決まったコマンドラインオプションで実行させることもできる。Ruby 1.8を使っていてKCODEを指定する場合に良く利用される。

#! /usr/bin/ruby -Ke
puts "EUC-JPの日本語Rubyスクリプト"

複数の環境で動作させたいRubyスクリプトの場合は、環境によってRubyが何処にインストールされているかわからないことが問題になる。そのような場合はshebang/usr/bin/env rubyを指定することで、環境の違いに対応できる。envコマンドラインオプションで与えたプログラムを環境の差異を吸収して実行してくれるプログラムだ。

#! /usr/bin/env ruby
puts "Hello, World!"

しかし、shebangに与えられるオプションは1つだけと決まっている。envにはrubyというオプションを与えてしまっているため、Rubyコマンドラインオプションを与えることができない。このような場合、以下のようにいったんシェルスクリプトをかませて、Rubyを実行する方法がある。これはRubyスクリプト中の#!rubyまでを読み飛ばす挙動を利用したものだ。

#!/bin/sh
exec ruby -S -x "$0" ${@+"$@"}
#!ruby
puts "Hello, World!"