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コマンド等では、シェルの名前と、シェルスクリプトのファイル名の双方が表示される。実行中のプロセスなどもわかりやすくなる。

補足

再検索