ALTERNATIVE_SHEBANG

#! (Unix)

構文

[13] ファイルの先頭に #! と書き、 その直後に実行するべき命令引数を書き、 改行を書きます。 その続きがファイルの本体となります。

#! perl

[17] Perl の世界では、環境によって perlpathが違うため、 配布用のスクリプトでとりあえず #!perl#! perl のように書いておく慣習がありました。

[18] その後 #!/usr/bin/env perl のように書かれるようになりました。 この書き方は Perl 以外でも行われます。

[19] 気にせずに #!/usr/bin/perl#!/usr/local/bin/perl のように決め打ちで書いておくこともよくありました。

[24] 同様に Ruby の世界でも #!ruby のように書いておく慣習がありました。


[22] perlpath を書く場所を示しておく ことに加えて、エディター類が shebang として認識して Perl モードに切り替えてくれることも期待できます。


[20] path 指定だけで実行する場合や CGIスクリプトとして実行させる場合には、 入手したらまず適切な path に書き換えて使います。

[21] 常に perl script.pl のように実行するのであれば、気にせずそのままで使います。

環境変数 ALTERNATE_SHEBANG

[16] Perl環境変数 ALTERNATE_SHEBANG によって shebang#! 以外に変更できます。 >>14

処理

[5] プラットフォームが実行時に読んで、実行するべき命令を決定します。

[10] Unix ではカーネル (execve) が読んで解釈します。

[11] CygwinMSYS / MSYS2 / Git Bash でも execve / exec が読んで解釈します。


[6] PerlRuby は起動時に読んで、オプションを認識します。

[7] awk も実装によっては読んでオプションを認識するとされます。

[8] tckshsh も読んで認識することがあるとされます。


[9] bash, sh, ksh, Pythonコメント (#) として認識し無視します。


[12] エディター類 (Emacs, Vim, その他各種)、 構文ハイライトツール (専用のもの、ページャーに組み込まれたもの、 差分表示ツールに組み込まれたものなど各種)、 その他プログラム開発支援ツール (lint など)、 ファイル形式sniffer などがファイル形式の判定の材料として使うことがあります。

[23] この用途の場合、厳密な path の指定を認識する意味はないので、 正規表現などによって perl が含まれているか、 ruby が含まれているか、のような大雑把な検査で決定する場合が多いようです。

関連

コメントの中身が意味を持ってしまう

ファイル形式の識別, 拡張子, creator code

permission

sniffing

メモ

[3] 本の虫: Shebangという謎な事実上業界標準について, , https://cpplover.blogspot.com/2013/08/shebang.html

[1] Shebang (Unix) - Wikipedia, the free encyclopedia ( 版) http://en.wikipedia.org/wiki/Shebang_(Unix)

[2] shell - How to use multiple arguments with a shebang (i.e. #!)? - Stack Overflow ( ( 版)) http://stackoverflow.com/questions/4303128/how-to-use-multiple-arguments-with-a-shebang-i-e

[4] URL#! とは無関係です。 #!