スクリプトの最初の行

スクリプトの最初の行

最初の行の #!/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シェルを使用してスクリプトを強制的に実行します。

関連情報