19
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Ruby】Rubyにおける正しいshebangの書き方

Posted at

shebangとは?

shebangとはUNIXのシェルスクリプトの業界標準で、
シェルスクリプトの一行目のコメントの、 #! がそれにあたる。
起動するインタプリタを指定することができる。

例えばbashであれば以下の通りとなる。

#! /bin/sh
echo 'Hello world!'

rubyにおけるshebangの指定

Rubyを指定する場合には以下の様に書かれることがあるが、
Rubyが必ずしも /usr/bin/rubyにあるとは限らない。

#! /usr/bin/ruby
puts 'Hello world!'

この問題を避ける為には、env コマンドを使えばよい。

#! /usr/bin/env ruby
puts 'Hello world!'

しかし、移植性を考えると上記でもまだ問題がある。
FreeBSDでは、標準の /etc/crontab は以下の様になっており
/usr/local/bin が含まれていない。

PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin

そのため、上記のshebangのスクリプトを /etc/crontab に登録すると、
FreeBSD においては ruby は /usr/local/bin にあるのが標準であり、
インタープリタを見つけられずにエラーとなる。

結論としては以下の様に記載するのがベストプラクティスの様である。

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

但し、#! /usr/bin/env は実用上極めて広範囲に動く為、
デフォルトとして無難ではある。
必要に駆られた時に、 exec ruby -x "$0" "$@" 方式にする運用で
良いのではないかと感じる。

参考:

Ruby 2.5.0 リファレンスマニュアル > Rubyの起動  
https://docs.ruby-lang.org/ja/2.5.0/doc/spec=2frubycmd.html

19
13
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?