違いはありますか、それとも個人的な選択ですか?
4 に答える
#!<interpreter> <arguments>
<interpreter> <arguments>
ファイルの残りを読み取って実行するために実行を試みます。
と呼ば#!/usr/bin/env
れるプログラムが存在する必要があることを意味し/usr/bin/env
ます。
#!/bin/env
というプログラムが存在する必要があることを意味し/bin/env
ます。
一部のシステムには一方があり、他方がありません。
私の経験では、ほとんどが を持っている/usr/bin/env
ので、#!/usr/bin/env
より一般的です。
Unix システムは を<interpreter>
使用して実行しようとしますexecve
。そのため、フル パスである必要があり#!env
、パスがないと機能しません。
ミケルの説明は素晴らしいです。小さな事実 (かなり重要です) が欠けています。すべてのスペースを含めて渡される引数は 1 つだけです。
#!<Interpreter> <argument>
呼び出しの結果:
$ <Interpreter> '<argument>' path_to_calling_script
たとえば、次のようになります。
$ cat /tmp/test
#!/usr/bin/env python
print "hi"
$ /tmp/test
次の呼び出しと同じです。
$ /usr/bin/env "python" /tmp/test
引用符は、フラグまたはその他の値を追加すると、呼び出される引数の一部になることを示しています。
#!/bin/bash -c /bin/env python
次のように解釈されます。
$ /bin/bash "-c /bin/env python"
これはうまくいきません。
/usr/bin/env
is a soft link to /bin/env
. Essentially, you are using /bin/env