*nix シェルが実行するインタープリターの種類を認識できるようにするための規則です。
たとえば、古いタイプの ATT は sh にデフォルト設定されていました (Bourne シェル)、旧バージョンの BSD のデフォルトは csh でした (C シェル)
今日でも (ほとんどのシステムで bash が実行されており、"Bourne Again Shell" )、スクリプトは bash、python、perl、ruby、PHP などで作成できます。たとえば、#!/bin/perl
が表示される場合があります。 または #!/bin/perl5
.
PS:感嘆符 (!
) は親しみを込めて "bang" と呼ばれています .シェル コメント記号 (#
) は 「ハッシュ」 と呼ばれることもあります .
PPS:覚えておいてください - *nix では、接尾辞をファイルの種類に関連付けることは単なる 慣例 です。 、「ルール」ではありません . 実行可能ファイル バイナリ プログラム、100 万種類のスクリプトのいずれか、およびその他のものにすることができます。したがって、#!/bin/bash
が必要です .
より正確にはシバン #!
、実行可能ファイルの最初の 2 バイトの場合 (x
mode) ファイルは、(プログラムを実行する) execve(2) システム コールによって解釈されます。しかし execve
の POSIX 仕様 シバンについては言及しないでください。
その後に、インタープリター実行可能ファイルのファイル パスを指定する必要があります (相対的な場合もありますが、ほとんどの場合は絶対パスです)。
インタープリターを見つけるための便利な (またはあまり良くない) トリック (例:python
) ユーザーの $PATH
で env
を使用することです プログラム (常に /usr/bin/env
すべての Linux で) など
#!/usr/bin/env python
どの ELF 実行可能ファイルもインタープリターにすることができます。 #!/bin/cat
を使用することもできます または #!/bin/true
あなたがしたいなら! (しかし、それはしばしば役に立たないでしょう)
シバンといいます。 Unix 用語では、# はシャープ (音楽のように) またはハッシュ (Twitter のハッシュタグのように) と呼ばれ、!バンといいます。 (以前のシェル コマンドを !! で実際に参照できます。これは bang-bang と呼ばれます)。一緒にすると、haSH-BANG、またはシバンになります。
#! の後の部分。実行に使用するプログラムを Unix に指示します。指定されていない場合は、bash(またはsh、zsh、または$SHELL変数が何であれ)で試行しますが、そこにある場合はそのプログラムを使用します。さらに、# はほとんどの言語でコメントであるため、以降の実行ではこの行は無視されます。