Path

何時使用 XPG* 版本的命令?

  • March 19, 2022

我偶爾會在預設版本不符合 POSIX 的舊 Solaris 機器grep工作。這會導致我的 rc 文件出現問題,因為grep機器上的預設設置不支持我需要的選項。

這是我工作地點的一台機器,我不是管理員;所以我不能只安裝我認為合適的更新/更好版本的命令。但是,我注意到該機器確實有一個合適的XPG版本grepat /usr/xpg4/bin/grep

顯然,我可以通過以下方式解決我的 rc 文件中的問題(對於 Solaris):

alias grep='/usr/xpg4/bin/grep'

但是那些沒有必要的機器呢?我的目標是為每個 shell 提供一個 rc 文件,我可以將其放入任何類 Unix 系統並讓它正常工作。

這讓我想…

  1. 有沒有我不想使用XPG版本的命令的情況?
  • 如果有,什麼時候?
  1. 難道我不能盲目地添加/usr/xpg4/bin/到所有機器上的 rc 文件的開頭$PATH並放棄將單個命令別名到它們的 XPG* 版本嗎?
  • 或者這會導致某些命令出現問題嗎?
  1. 是否/usr/xpg4/bin/僅在“必要”的機器上存在這種情況?
  • 我問是因為我注意到/usr/xpg4/bin/我的 Ubuntu 機器上不存在。

所以總結一下,這是個好主意嗎?

if [ -d "/usr/xpg4/bin" ]; then
 #Place XPG directory at beginning of path to always use XPG version of commands
 export PATH="/usr/xpg4/bin:$PATH"
fi

如果不是,為什麼不呢?

/bin一些商業 Unix 系統在和中具有向後兼容的實用程序,/usr/bin以及諸如/usr/xpg4/bin包含 POSIX 兼容實用程序的目錄。這樣,舊應用程序可以PATH只使用/binand來堅持舊應用程序/usr/bin,而較新的應用PATH程序首先使用 POSIX 實用程序。除非您需要向後兼容該 Unix 系統的 1980 年代實用程序,否則最好使用 POSIX 實用程序。

在我的.profile中,我將以下目錄放在/binand之前/usr/bin,如果它們存在:

/bin/posix
/usr/bin/posix
/usr/xpg6/bin
/usr/xpg4/bin
/usr/xpg2/bin

我認為這至少涵蓋了 Solaris、Tru64(又名 Digital Unix aka OSF/1)和 HP-UX。

您應該能夠通過呼叫實用程序來找到適合PATH依賴 POSIX 的應用程序,而不是自動確定 PATH:getconf

PATH=$(getconf PATH)

某些系統(例如 *BSD 和 Linux)僅提供與 POSIX 兼容的實用程序,因此它們位於通常的目錄 ( /bin, /usr/bin) 中,不需要任何單獨的目錄。

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