16

違いはありますか、それとも個人的な選択ですか?

4

4 に答える 4

18

#!<interpreter> <arguments><interpreter> <arguments>ファイルの残りを読み取って実行するために実行を試みます。

と呼ば#!/usr/bin/envれるプログラムが存在する必要があることを意味し/usr/bin/envます。
#!/bin/envというプログラムが存在する必要があることを意味し/bin/envます。

一部のシステムには一方があり、他方がありません。

私の経験では、ほとんどが を持っている/usr/bin/envので、#!/usr/bin/envより一般的です。

Unix システムは を<interpreter>使用して実行しようとしますexecve。そのため、フル パスである必要があり#!env、パスがないと機能しません。

于 2011-04-05T08:20:44.617 に答える
2

ミケルの説明は素晴らしいです。小さな事実 (かなり重要です) が欠けています。すべてのスペースを含めて渡される引数は 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"

これはうまくいきません。

于 2012-12-05T11:15:05.337 に答える
1

/usr/bin/env is a soft link to /bin/env. Essentially, you are using /bin/env

于 2011-04-05T08:29:53.513 に答える