シバン (Unix)
シバンまたはシェバン (英: shebang) とはUNIXのスクリプトの #!
から始まる1行目のこと。起動してスクリプトを読み込むインタプリタを指定する。番号記号と感嘆符から、ハッシュ・バン(hash bang)またはシェル・バン(shell bang)、シャープ・バン(sharp bang)とも言うが、これらを縮めたシェバンという呼び方が一般的かつ簡素である[2]。
例
編集パスを直接指定する。Bourne shell の例。
#!/bin/sh echo 'Hello world!'
Ruby言語のインタプリタ ruby
の例(env
コマンドを用いたトリック)。
#!/usr/bin/env ruby puts 'Hello world!'
補足
編集- ファイル先頭のシバンを認識するのは、オペレーティングシステム (OS) の
execve
システムコール(exec
を参照)を処理するルーチン中のプログラムローダーである[3]。 - ファイルの先頭がバイト順マークになっているUnicode形式のファイルの場合は動作しない。これはバイト順マークのために、OSのプログラムローダーがシバンを認識できなくなるためである。
- シバンの参照先は、実行可能バイナリでなければならず、(シバン行のある)スクリプトであってはならない。
- シバン行の最大文字数、指定可能な引数の数などは環境依存である。また、それを逸脱した場合の動作も環境依存である。特に複数個の引数を与えた場合にどう扱われるかはまちまち(普通に扱われる、2個目以降は無視される、空白の入った1個の引数にされる)であるため、注意が必要である[2]。
- envを用いたトリックはPATH環境変数に依存する。親プロセスが独自にPATHを設定していた場合、想定外の動作をする可能性がある。
ruby
インタプリタの場合は-x
オプションを利用した以下のようなシェルスクリプトに見せかけるトリックを使用したほうが良い。
#!/bin/sh # -*- ruby -*- exec ruby -x "$0" "$@" #!ruby puts 'Hello world!'