他の人が指摘したように:代わりに、スクリプトの先頭にFIND
変数を設定する必要に応じて、1には、名前を変更、代替が存在しない場合は、標準find
コマンドを使用しての既定の動作に通って落ちる、ラッパーを指定することができますアウト、それはそれらの行は、彼らがあるべきより多くの可能性が正しいことはほとんどありません:
ECHO="/bin/echo"
GREP="/bin/grep" # (for linux)
は、彼らが正しいと仮定すると、このようなコードは(ない鉱山、私が追加される場合があります)一般的にシェルスクリプトで見られるために使用しました。あなたはこれ以上多くの人々を使用することはありません。
echo
:ksh
(お好みのシェルにするために使用Kornシェル、)、csh
(Cシェル、太陽のデフォルトのシェル)とsh
(Bourneシェル、それはPOSIXだった前に)すべてが自分内蔵していたバージョン(ほとんどが-n
引数の周り)であったecho
のものです。したがって、スタンドアローンのプログラム/bin/echo
が移植性のために使用されることがありました。そのために支払うべきパフォーマンス価格があります。
grep
など:外部プログラムの絶対パス名をスクリプトに設定することをお勧めします。主な理由はセキュリティです。理論的には、ユーザーは自分のバージョンをローカルディレクトリに用意して、PATH
変数を変更することができます。 PATH
、および他のすべての環境変数は、多くの場合、依然としてセキュリティリスクとみなされます。 2番目の理由は、ディレクトリの検索のパフォーマンスオーバーヘッドが$PATH
であることです。これは、追跡されたエイリアス(ksh)またはハッシュ(bash)の日以前です。
私はこれらの意見をすべて購読していないことを繰り返しますが、私は何人かの人と議論しましたが、それは説明です。私の意見では、このプラクティスは解決するよりも多くの問題を引き起こします。
編集:私が言及しているプラクティスは、1970年代と80年代にさかのぼります。なぜ彼らは2011年からのスクリプトになるのだろうか?おそらく「私たちは常にそれをしている」、つまり「会社の方針」、つまり誰も知っていない、または気にしていないからです。あるいは、古いウェブサイトや本、あるいはこれが良いアイデアだと信じている人からさえ、コピーアンドペーストのケースかもしれません。
あなたがどこか妥当で官能的であると感じるシェルのランダムなチャンクを信頼することは、良い習慣ではありません。あなたが他の人のスクリプトに見られるランダムなものをコピーすると、あなた自身に参加するかもしれません。 –
ところで、これは 'bin \ echo'ではなく'/bin/echo'でしょう。 –
@ JimLewis、それはスクリプトの目的であり、実際の目的ではありません。むしろ、私はむしろ強調して、移植性ではなく、問題の練習が損害であると強調している。 –