POSIXは標準ユーティリティがPATHにあることを保証しますか?


11

では「コマンド検索と実行」セクション、POSIX仕様では、それは言うPATH(一部例外あり)を実行するためのユーティリティを見つけたときに検索されます。仕様は、PATHすべての標準ユーティリティが見つかることを保証する値に初期化される場所について言及していますか?

または、標準ユーティリティを実行しようとしたときに「コマンドが見つかりません」というエラーが発生しないことを保証するために、次のようなことをする必要がありますか?

PATH=$(command -p sh -c 'printf %s "${PATH}"')

ユーティリティのPOSIX仕様をcommand参照)

回答:


13

はいといいえ。POSIX環境では、ユーティリティは仕様で説明されているように動作する必要があります。実際には、これは、ユーティリティの準拠バージョンがに存在する必要があることを意味します$PATH。ただし、プログラムをPOSIX準拠システムで実行すると、非準拠環境で実行される場合があります。実際には、OSにはレガシーモードとPOSIXモードがあり、デフォルトではレガシーモードになっていることがよくあります。一部のコマンドが欠落しているよりも悪いことに、レガシーモードは、異なる意味を持つオプションなど、それらに互換性がない傾向があります。

あなたは良いを取得することができPATHgetconf。もちろん、getconfオリジナル$PATHは正しいものではないかもしれないので、それはトリッキーです。コマンドのアプリケーション使用法は、それを行う方法を示しています。

command -p getconf PATH

仕様を理解している限り、POSIX準拠の環境でプログラムを実行している場合、これは必要ありません。また、POSIX準拠の環境でプログラムを実行していない場合、POSIXは適用されません。ただし、このアプリケーションの使用方法は推奨事項と見なすことができます。これが機能しない場合は、POSIX仕様の書簡に関してベンダーが何をしている場合でも、ベンダーの精神に準拠していないことをベンダーに不平を言う権利があります。


えっと、getconf PATHアプリケーションの使用法のセクションでそのことに気づきませんでした。ありがとう!
Richard Hansen
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.