必ずしも良いとは限りません。
の利点は、ユーザー#!/usr/bin/env pythonのにpython最初に現れる実行可能ファイルを使用すること$PATHです。
の欠点は、ユーザー#!/usr/bin/env pythonのにpython最初に現れる実行可能ファイルを使用すること$PATHです。
つまり、スクリプトの実行者によってスクリプトの動作が異なる可能性があります。1人のユーザーについて/usr/bin/pythonは、OSと共にインストールされたものを使用する場合があります。もう1つは、/home/phred/bin/python正しく動作しない実験的なものを使用する場合があります。
場合とpythonだけでインストールされている/usr/local/bin、持っていないユーザー/usr/local/binでは$PATHさえ、スクリプトを実行することはできません。(これはおそらく現代のシステムではあまり起こりそうにありませんが、より曖昧なインタプリタでは簡単に起こります。)
指定する#!/usr/bin/pythonことにより、特定のシステムでスクリプトを実行するために使用するインタープリターを正確に指定します。
もう1つの潜在的な問題は、#!/usr/bin/envトリックが(暗黙的に渡されるスクリプトの名前以外の)引数をインタープリターに渡させないことです。通常、これは問題ではありませんが、問題になる可能性があります。多くのPerlスクリプトはで記述されて#!/usr/bin/perl -wいますuse warnings;が、最近では推奨される代替品です。Cshスクリプトはを使用する必要があります#!/bin/csh -fが、そもそも cshスクリプトは推奨されません。しかし、他の例もあり得ます。
新しいシステムにアカウントを設定するときにインストールする個人用ソース管理システムには、いくつかのPerlスクリプトがあります。私は#!それをインストールするときに各スクリプトの行を変更するインストーラースクリプトを使用します$HOME/bin。(私は#!/usr/bin/perl最近以外のものを使用する必要はありませんでした;それはPerlがしばしばデフォルトでインストールされなかった時代に戻ります。)
些細な点:#!/usr/bin/envトリックは間違いなくenvコマンドの悪用です。これは元々(名前が示すように)変更された環境でコマンドを呼び出すことを目的としていました。さらに、一部の古いシステム(正しく思い出せばSunOS 4を含む)にはのenvコマンドがありませんでした/usr/bin。これらのどちらも重大な懸念事項ではないでしょう。 envこのように機能し、多くのスクリプトがこの#!/usr/bin/envトリックを使用します。OSプロバイダーはそれを破るために何もしません。それは可能性がある、あなたのスクリプトは本当に古いシステム上で実行したい場合に問題となるが、その後、あなたはとにかくそれを修正する必要がありそうです。
別の考えられる問題(コメントで指摘してくれたSopalajo de Arrierezに感謝)は、cronジョブが制限された環境で実行されることです。特に、$PATH通常はのようなものです/usr/bin:/bin。その$PATHため、ユーザーシェルのデフォルトにある場合でも、インタープリターを含むディレクトリがこれらのディレクトリの1つにない場合、/usr/bin/envトリックは機能しません。正確なパスを指定するか、crontabに行を追加して設定できます$PATH(man 5 crontab詳細について)。