2017-06-08 5 views
0

/usr/bin/pythonではなく/ usr/bin/env pythonを使用することをお勧めします。 これは、ここで回答を読んでからインスパイアされました:What do I use on linux to make a python program executable環境変数をあらかじめ設定する必要がない場合でも、なぜ `実行可能 'ではなく` env <executable> `と表示されるのですか?

は、私は両方ともまったく同じことをするだろうと思うが、同じように言及し、両方の答えがenvを使用すると言う答えを2票ではなく、88票を持っています。人々はenvの使用に本当に同意するようですが、理由を説明しません。 envは、ユーザがカスタマイズした特定のパスにあるものだけでなく、 "python"という名前の実行ファイルを見つけるのに役立ちますか?

私は本当にenvを使用するためのさまざまな利点と使用例を知りたいと思っています。man envは説明しませんでした。 man envはNAME = VALUE、あなたが実行する前に環境変数を設定するENVを使用できることを言いますが、私たちは、リンクされた例ではそれをやっていません。

私はコミュニティが明らかにenvを使用することを推奨していると感じていますが、私自身の研究は理由を示唆していません。

+0

https://unix.stackexchange.com/questions/29608/why-is-it-better-to-use-usr-bin-env-name-instead-of-path-to-name-as-my –

答えて

1

#!/usr/bin/env pythonを使用すると、現在定義されているPATH内の最初のPythonインタプリタが使用され、ユーザーのオーバーライド(Pythonの場合はvirtualenvなどが含まれます)が適用されます。

これは、OSベンダーパッケージが古くなっているMacOSなどの環境では特に重要です(たとえば、/bin/bashは3.2 - 2006年のリリースシリーズです)。一方、MacPortsまたはHomebrew 、/opt/local/bin/bashまたは/usr/local/bin/bashは、現代の4.xであってもよく、従って、#!/usr/bin/env bashは、ユーザがインストールした任意の更新のbashインタプリタの利点を得ることが、システム全体かどうか自分のホームディレクトリの下に、限りそのインタプリタの位置が中に存在するように実行時のPATH)。

+3

バージョンだけでなく、存在することもあります。スクリプトが '#!/ usr/bin/python'をハードコードしていて、システムに'/bin/python'がインストールされていれば、すべてのスクリプトが失敗します。 –

関連する問題