shebang
読み:シバン
外語:shebang: shell-bang
UNIX
の
スクリプト
の先頭に書かれる、
#!
から始まる行のこと。
目次
概要
特徴
#!がないとき
#!の動作
#!の重要性
補足
概要
この行で、そのスクリプトを処理する
インタープリター
の
フルパス
を指定する。
「#!/bin/sh」や「#!/usr/bin/perl」といったものがよく見られる。
特徴
#!がないとき
スクリプトファイルは、中にスクリプトを記載した
ソースファイル
ではあるが、同時に単なる
テクストファイル
でもある。
単なるソースファイルに実行権限を付けて実行しても、何もなければ行頭から1行ずつ順番に実行するだけの、ただの「コマンドの羅列」となる。
それで充分なこともあるが、それは単なるバッチファイルとしての動作であり、スクリプトファイルとしては機能していない。
#!の動作
1行目に「#!」を書くと、そのファイル自身を、指定されたインタープリターに与えて実行したことと同じ動作となる。この時のインタープリターの名前はフルパスで書かねばならない。
Linuxで一般的な
bash
を使ったbashスクリプトの場合は、次のようになる。
#!/bin/bash
フルパスは、whichコマンドなどで出てくる。(例: which bash)
スクリプトファイルをスクリプトファイルとして用いるためには、1行目に「#!」が必須ということになる。
#!の重要性
ファイル内に記述されたコマンドの羅列の実行機能だけであれば、1行目に「#!」がなくても一応は動く。ただしこの場合、ファイル内容であるコマンドの羅列が標準のシェルに送信され順次実行されるのみとなり、psコマンドやtopコマンド等で見ても、表示されるのはそのシェルの名前だけで、実行しているシェルの特定が困難となる。
一方、1行目に「#!」を書くと、1行目で指定されたシェルにファイルが渡されるため、psコマンドやtopコマンド等では、シェルの名前と、シェルスクリプトのファイル名の双方が表示される。実行中のプロセスなどもわかりやすくなる。
補足
指定するインタープリターは、
実行ファイル
であることが必須である。スクリプトだった場合は動作しない
引数は空白で区切って記述できる
shebang行の最大長は実装依存である。あまり長くしないほうがよい
UTF-8
で記述する場合、ファイル先頭に
BOM
を付けてはならない。OSは、単純にファイル先頭のバイト列が「#!」かどうかしか見ていない
再検索