PATHでユーティリティ名の競合を防ぐ

PATHでユーティリティ名の競合を防ぐ

PATH環境変数にカスタムディレクトリを含めるか、すでに含まれているディレクトリにカスタムスクリプトを配置することを躊躇してきました。

その理由は、外部プログラムを呼び出すバイナリが私のカスタムスクリプトの1つと同じ名前を持ち、必要なバイナリがコンピュータに存在しない(もちろん)可能性が低い極端なケースを避ける方法がわからないからです。 。だからプログラムは実際に私のカスタムスクリプトを呼び出しますが、これは問題だけを引き起こします。

これは通常、ラッパースクリプトを使用して実行されるのと同じ名前のカスタムスクリプトを使用してバイナリを非表示にするのと多少似ています。ただし、この場合、そのコンピュータには関連プログラムが存在しないため(同じ名前のカスタムスクリプトのみ)、変数内のカスタムスクリプトの場所はPATHまったく重要ではありません。

変数が使用されているディレクトリにカスタムスクリプトを保存しないこと以外にこれを防ぐ方法はありますかPATH?覚えておくべき唯一の可能性は、常に絶対パスを使用してカスタムスクリプトを呼び出すことです。

ベストアンサー1

3つの解決策:

  1. 変更なしで絶対パスを使用してカスタムスクリプトを呼び出すには、必ず推奨事項に従ってください$PATH

    これにより、必要であることがわかったときにスクリプトを呼び出すことができ、スクリプトが誤って他のユーティリティを「隠す」ことがなくなります。

  2. $PATHカスタムスクリプトへのパスが、標準ディレクトリとサードパーティソフトウェアを含むディレクトリパスの後ろにあることを確認してください。

    欠点は、他のユーティリティと同じ名前のスクリプトがある場合は、独自のスクリプトの代わりにそのユーティリティを呼び出すことです。これはあなたの懸念と反対です。

  3. スクリプトに一意の名前があることを確認し、前の手順に従ってください。

    システムユーティリティはほとんどありません(そして基準たとえば、ユーティリティ never) は.shファイル名のサフィックスとして使用されます。wally-独自のスクリプトのプレフィックス(wally-backup.shまたは)などの「名前空間」の構築を検討することもできますwally-getmail

通常、標準のUnixユーティリティの名前を知って使用を避ける必要があります(testたとえば、カスタムユーティリティの悪い名前)。標準ユーティリティ名一覧ここで見つけることができます。同様に、特別な組み込みユーティリティの名前をカスタムスクリプトに使用しないでください。これらは以下にリストされています。このリンクの終わり


修正された場合は$PATH修正してください。こっそりつまり、ログインしている間、権限のないユーザーとしてのみ使用できます。マルチユーザーシステムのシステム管理者であり、スクリプトが実際に他の人が使用していない限り、システム全体で変更しないでください(そして何らかの$PATH理由で自分のスクリプトを変更するのは面倒です)。システムを修正する場合は、$PATH「シャドウの問題」が発生しないことを必ず確認してください。そうしないと、$PATH使用場所によっては基本的なシステム機能が損なわれる可能性があります。

おすすめ記事