linux上で動作するスクリプト先頭行に書く「#!…」行の意味は?

sh・csh・perl・rubyなどで作成したスクリプトの先頭行には、
#!/bin/sh
#!/usr/bin/perl
などと記述する。

初心者の内はおまじない!と習っていることでしょう。

この「#!」がファイル先頭2バイトにあると、UNIXはその後に続くコマンドを実行します。

例えば、

ファイル名:test.pl
ファイルの先頭行:#!/usr/bin/perl
というスクリプトがある場合、

>./test.pl
と実行すると、UNIXカーネルは「#!」に続く/usr/bin/perlを実行し、その引数としてtest.plを渡します。
つまり、

>/usr/bin/perl ./test.pl
と同じ動作をします。

なお実際にtest.plが実行される際は、先頭行の「#!/usr/bin/perl」はコメント行としてスルーされます。
ところでこの「#!」ですが、皆さんは名前をご存知でしょうか?
「シェバング」(shebang)と呼ぶそうです。
語源は「sharp bang」「shell bang」など諸説あるようですが、名前が付いている事は知りませんでした。
また先頭行の「#!/usr/bin/perl」を、「シェバング行」と呼ぶこともあるようです。
 

コメント

タイトルとURLをコピーしました