rubyで作ったプログラムをターミナルからコマンドで実行したい。


環境はMacとCentOSを考えています。

`~/hoge/ruby.rb`というプログラムをターミナルから実行するには、通常`$ruby ~/hoge/ruby.rb`とする必要がありますが、
これを`$hoge -option`という感じで実行することはできますか?

可能であればどのような手順、知識が必要なのか、またそうすること自体に問題があるかどうか教えてください。




原理から説明します。

GUI 上のファイルマネージャ(例:
Windowsのexplorer、Linuxのnautilus)はファイルの中身や拡張子からそれが「rubyのスクリプトだ」と判断しています。
ですのでダブルクリックした際は自動で

[code]

    ruby /home/mattn/hoge/ruby.rb
    
[/code]

というコマンドが実行される様になっています。かたやターミナル、つまりシェルから実行する際はその辺は自動で行ってくれません。
ただしスクリプトファイルに2点手を入れる事で、GUI からでもターミナルからでも実行できる様に出来ます。

# shebang の付与

上記でも書かれていますが、UNIX 系 OS ではファイルの先頭に

[code]

    #!インタプリタの実行方法
    
[/code]

という行を付与する事で、そのファイルを実行する際の方法を指定する事が出来ます。つまり拡張子 `.rb` と言いながら perl
で起動するという事も出来ます。 尚、OS によってインタプリタがインストールされる場所が異なる為

[code]

    #!/usr/bin/env ruby
    
[/code]

と書くのが一般的です。env は引数で与えられたコマンドを PATH 環境変数から解決して実行してくれます。

# 実行権限の付与

shebang を付与しただけでは実行できません。以下のコマンドを実行して、コマンドラインから直接実行出来る様にします。

[code]

    chmod +x ~/hoge/ruby.rb
    
[/code]

これで GUI 上のファイルマネージャ等からでもダブルクリックで起動でき、ターミナルからでも実行できるコマンドとなりました。

なお、この上記2つの対応を入れる事で、ファイルの拡張子は必要なくなりますので、パスの通った場所に自由な名前で置いて頂くと名前だけで実行出来る様になります。

