
最初の行の #!/bin/bash はどういう意味ですか?それはただのコメントであり、プログラムの他のすべてのコメントと同様に、シェルでは無視されますか?
または
インタプリタはこの行だけを解釈し、#で始まる他のすべての行は無視します(#!/ bin / bashを除く)。
答え1
最初の行は、ファイルの実行時に使用するインタプリタをコンピュータに通知します。
Pythonでスクリプトを作成するとします。このスクリプトの実行中にPythonインタプリタを使用します。コンピュータはどのインタプリタを使用するかをどのように知ることができ、次の行でも知ることができます。シェルボーン、Pythonの場合
#!/usr/bin/env python
print "Hello world"
bashでスクリプトを作成し、bashスクリプトのshebangを使用してこのコードを実行するときにbashインタプリタを使用するようにコンピュータに指示するとします。
#!/usr/bin/bash
echo "Hello world"
答え2
(Linuxでは)で始まる最初の行は次#!
のように表示されます。Linuxカーネル内部実装実行(2)システムコール(ほとんどのコマンドでは、シェルは後でそれを呼び出します。fork
このコマンドは関数でもシェル組み込みでもありません)。
他の実行可能ファイルへの絶対パスを参照できます(例を/usr/bin/env
参照)。環境(1))。愚かな例として、一意の行を含むスクリプトを作成し、スクリプトを読み込んで#!/bin/cat /proc/self/maps
実行できるようにしてからchmod a+rx
実行してみてください。
POSIXexecve
仕様一つも言及しなかったシェルボーン特定の処理を実行したが、私が作業したすべてのUnixシリーズシステム(Linux、SunOS、HPUX、AIX ...)では、execve
通訳者は、でbash
始まる他の行と同様に、この行を#
コメントにスキップします。
また見てくださいbinfmt_misc(Linuxのみ)。
答え3
現在使用されているシェルの代わりにbashシェルを使用してスクリプトを強制的に実行します。