シバン (Unix)

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索

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

[編集]

パスを直接指定する。Bourne shellの例。

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

envを用いたトリック。Rubyの例。

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

補足[編集]

  • ファイル先頭のシバンを認識するのは、OSのexecveシステムコール(execを参照)を処理するルーチン中のプログラムローダーである。
  • ファイルの先頭にバイトオーダーマークが付加されていると、動作しなくなる。これはバイトオーダーマークのために、OSのプログラムローダーがシバンを認識できなくなるためである。
  • シバンの参照先は、実行可能バイナリでなければならず、(シバン行のある)スクリプトであってはならない。
  • シバン行の最大文字数、指定可能な引数の数などは環境依存である。また、それを逸脱した場合の動作も環境依存である。特に複数個の引数を与えた場合にどう扱われるかはまちまち(普通に扱われる、2個目以降は無視される、空白の入った1個の引数にされる)であるため、注意が必要である[1]
  • envを用いたトリックはPATH環境変数に依存する。親プロセスが独自にPATHを設定していた場合、想定外の動作をする可能性がある。
  • このように問題も多いので、上で挙げた例のようにrubyの場合はこのための-xオプションがあるので、それを利用した以下のようなシェルスクリプトに見せかけるトリックを使用したほうが良い。
#!/bin/sh
# -*- ruby -*-
exec ruby -x "$0" "$@"
#!ruby
puts 'Hello world!'

[編集]

  1. ^ a b http://www.in-ulm.de/~mascheck/various/shebang/