Linuxはテキストスクリプトを実行するときに呼び出すインタプリタをどのように決定しますか?

Linuxはテキストスクリプトを実行するときに呼び出すインタプリタをどのように決定しますか?

Linuxがテキストスクリプトを実行するときに呼び出すインタプリタを決定する方法を知っている人はいますか? 「shebang」の詳細、目的、および実行方法が必要です。

答え1

スクリプトを実行するには2つの主な方法があります。

  • スクリプトをロードする実行可能ファイルの名前を使用してください。

     perl script.pl
    
     python script.py
    

この場合、シェルは実行ファイルをロードして引数をperl提供pythonしますが、実行ファイルは与えられた引数がスクリプトであることを知ってロードして実行できる必要があります。

ここには特別な魔法はありません。シェルはパラメータを使用して実行可能ファイルを起動します。

  • スクリプトは実行可能で、独自に起動します。

    $ script.sh  
    $ ./script.pl  
    $ /some/path/script.py
    

制御は呼び出しを介してカーネルに提供されますexecve。スクリプトが有効なシェーバン(またはELFなどの実行可能ファイル)を持つテキストファイルの場合、カーネルはファイルの先頭のマジック値を理解し、指定されたインタプリタをロードします。その後、インタプリタはテキストファイルをスクリプトとしてロードして実行します。

シェル呼び出しがexecve失敗した場合(スクリプトに有効なシェーバンがない場合)、シェルは可能スクリプトを直接ロードして実行します。これはbashによって行われます。

そしていくつかのケースでは、以下からman bash

プログラムが#!で始まるファイルの場合、最初の行の残りの部分はプログラムのインタプリタを指定します。シェルは、この実行可能形式をデフォルトで処理しないオペレーティングシステムで指定されたインタプリタを実行します。

詳細について知りたい場合は、次のサイトをご覧ください。

これ#!魔法、さまざまなUnixバージョンのshebang / hash-bangメカニズムの詳細

非常に似た質問

関連情報