シェルスクリプトのチュートリアルをいくつか見て、次のサンプルプログラムを見つけました。
#!/bin/sh
clear
echo "HELLO WORLD"
コメントで「!/bin/sh
」に言及することの意義を教えてください。
Shebangと呼ばれ、親シェルにスクリプトの実行に使用するインタープリターを指示します。
例えば.
#!/usr/bin/Perl <--Perl script'
#!/usr/bin/php <-- php script
#!/bin/false <--- do-nothing script, because false returns immediately anyways.
コメントとして実装されているので、その行に来るものはすべて、指定されたインタープリターに「関連」しません。例えばすべてのスクリプト言語は、#
で始まる行がコメントであることを理解する傾向があり、そうでなければその特定の言語の構文エラーである可能性のある!/usr/bin/whatever
部分を無視します。
UNIX(実行可能ビットが設定されたもの)でプログラムを実行しようとすると、オペレーティングシステムはファイルの最初の数バイトを調べます。これらは、いわゆる「マジックナンバー」を形成します。これは、プログラムの形式と実行方法を決定するために使用できます。
#!
は、マジックナンバー0x2321に対応します(asciiテーブルで検索します)。システムがマジックナンバーを認識すると、システムはテキストスクリプトを処理していることを認識し、次の\n
まで読み取ります(制限はありますが、ATMをエスケープします)。通訳者(シバンの後の最初の引数)を特定すると、通訳者を呼び出します。
他のファイルにもマジックナンバーがあります。 less
を介してビットマップ(.BMP)ファイルを見ると、最初の2文字がBM
であることがわかります。このマジック番号は、ファイルが実際にビットマップであることを示しています。
このスクリプトが存在するファイルが実行可能な場合、ハッシュバン(#!
)は、オペレーティングシステムに、スクリプトの実行に使用するインタープリターを通知します。この場合、たとえば/bin/sh
です。
詳細については、 ウィキペディアの記事 があります。
最初の行は、スクリプトを直接実行する場合(/ bin/sh run.shではなく./run.sh)、そのプログラム(この場合は/ bin/sh)を使用して解釈する必要があることをシェルに伝えます。
また、一般的に-e(エラー時に終了)の引数を渡すために使用したり、他のプログラム(/ bin/awk、/ usr/bin/Perlなど)を使用することもできます。