#!の行の処理

実行属性の付いたテキストファイルの先頭行を#! /path/to/interpreterもしくは#!/path/to/interpreter形式で記述すると、このファイルを直接実行したときにそのファイルの場所が引数としてそのパス名(/path/to/interpreter)のプログラムに渡されて処理される

例えばPerlのインタプリタ(perlコマンド)はGNU/Linuxでは/usr/bin/perlというパス名なので、Perlスクリプトの先頭行を#! /usr/bin/perlと記述してそのスクリプトに実行属性が付いていれば、直接実行したときにPerlのインタプリタに渡され、スクリプトが動作する。[32]

インタプリタに引数やオプションを付けることもでき、例えばPerlスクリプトの場合でperlコマンドに-wオプションを付けるには#! /usr/bin/perl -wと記述する

#!の横に記述する絶対パスは機械語の実行形式のパス名にすることになっており、中身がスクリプトとなっている実行ファイルへ渡すようにするには#! /path/to/interpreter /path/to/scriptのようにする



[32] GNU/Linuxではディストリのパッケージは/usr/の直下(/usr/bin//usr/lib/など)にファイルやディレクトリを配置し、/usr/local/以下は手動インストール用になっていて、#! /usr/local/bin/perlと書かれているスクリプトは/usr/local/bin/の中に管理者権限で/usr/bin/perlへのリンクを作るか、スクリプト側で先頭行を#! /usr/bin/perlにしないと直接実行はできない。