shebang演算子は、スクリプトを実行するためにどのシェルが使用されるかを知らせます。次のような場合はどうなりますか?
#!/bin/bash
「ksh script_name」と入力するとどうなりますか?
答え1
入力すると該当するパラメータで実行ksh script_name
されます。これはkshによって実行されることを意味します。 shebangは、スクリプトを明示的に実行する場合にのみ重要です(例:)。ksh
script_name
./script_name
答え2
短い答え:kshはスクリプトを実行し、それを#!/bin/bash
コメントとして扱います。
説明する:bashまたはすべてのシェルは、実行のために実行可能ファイルが呼び出されるたびにexec()
システムコールを呼び出します。
exec()
ファイルをロードし、ファイルの最初の16ビットを確認して実行可能な形式を確認します。 #!が見つかったら、ファイルの最初の行の残りの部分を使用して起動する必要があるプログラムを見つけ、起動したいファイル(スクリプト)の名前をインタプリタの最後の引数として指定します。
Shebangで指定されたインタプリタがスクリプトを実行する方法です。
ただし、kshを指定して引数を指定すると、execはshebangを検索しませんが、シェルは変数でバイナリファイルを見つけてバイナリファイルを$PATH
ロードし、ファイル名をバイナリファイルに引数として提供します。