通常、シェルスクリプトは、/ etc/passwdファイルで定義されているデフォルトのシェルによって実行されます。しかし、スクリプトを実行できるプログラムを明示的に定義することができます。
Unicesは、特定のスクリプト(男性execve(2))の実行に必要なプログラムを特定するための一般的な方法を使用します。スクリプトに適切な実行権が設定されていて、スクリプト内の最初の行が#!
文字で始まっている場合、後で定義されたプログラムによって実行されます。
たとえば、最初の行が#!/usr/bin/awk -f
の場合、残りのファイルはawk
プログラムに渡されます(したがって、awk
の構文を使用する必要があります)。あるいは、Makefileが#!/usr/bin/make -f
で始まっていれば、残りのファイルはmake
に渡されます。スクリプトを通常のプログラムとして起動することができ、スクリプトはawk
またはmake
(または何らかの定義どおりの)構文で記述することができます。
execve
は、ファイルの最初の2文字として#!
が見つからない場合、通常のスクリプトファイルとみなされ、そのまま実行されます。
したがって使用する#!
スクリプト言語を特定できます。スクリプトを使用して他のユーザーがどのシェルを使用しているかを知る必要はありません。他の行では#!
がデフォルトのシェルと解釈されます。これは通常は単にコメント行です。
スクリプトをコードタグで囲んだ方が簡単です。不規則なフォントは本当に混乱します... – user1581900
#!/ bin/shは、スクリプトに使用するシェルへのパスを指定します。同様の質問がここで答えられました:http:// stackoverflow。com/questions/8967902 /なぜあなたが必要とするのbin-bash-at-the-start-of-aスクリプトファイル – user1581900
可能な複製... http://stackoverflow.com/questions/7366775/what-does-the-line-bin-sh-un-a-unix-shell-script – Peeyush