Path

POSIX 是否保證標準實用程序在 PATH 中?

  • May 23, 2012

“命令搜尋和執行”部分中,POSIX 規範說PATH在找到要執行的實用程序時進行搜尋(有一些例外)。規範是否提到了PATH將初始化為保證所有標準實用程序都可以找到的值的任何地方?

或者我是否需要執行以下操作以保證在嘗試執行標準實用程序時永遠不會出現“找不到命令”錯誤?

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

(請參閱實用程序的POSIX 規範command

是和不是。在 POSIX 環境中,實用程序必須按照規範的描述執行。實際上,這意味著實用程序的一致版本必須存在於$PATH. 但是,當您在符合 POSIX 的系統上執行程序時,您可能會在不符合標準的環境中執行它。在實踐中,經常發生的情況是作業系統有legacy模式和POSIX模式,並且預設處於legacy模式。比遺漏一些命令更糟糕的是,遺留模式往往存在不兼容的問題,例如具有不同含義的選項。

你可以PATHgetconf. 當然,這很棘手,因為getconf原始版本$PATH可能不是正確的。命令的應用程序用法顯示了一種方法:

command -p getconf PATH

據我了解規範,如果您在符合 POSIX 的環境中執行程序,則不需要這樣做;如果您沒有在符合 POSIX 的環境中執行程序,則 POSIX 不適用。然而,這個應用程序的使用可以作為一個建議:如果這不起作用,你可以向你的供應商抱怨無論他們在做什麼關於 POSIX 規範的文字,他們都沒有遵守它的精神。

引用自:https://unix.stackexchange.com/questions/39244