必ずしも良いとは限りません。
の利点は、ユーザー#!/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
詳細について)。