何時使用 XPG* 版本的命令?
我偶爾會在預設版本不符合 POSIX 的舊 Solaris 機器
grep
上工作。這會導致我的 rc 文件出現問題,因為grep
機器上的預設設置不支持我需要的選項。這是我工作地點的一台機器,我不是管理員;所以我不能只安裝我認為合適的更新/更好版本的命令。但是,我注意到該機器確實有一個合適的XPG版本
grep
at/usr/xpg4/bin/grep
。顯然,我可以通過以下方式解決我的 rc 文件中的問題(對於 Solaris):
alias grep='/usr/xpg4/bin/grep'
但是那些沒有必要的機器呢?我的目標是為每個 shell 提供一個 rc 文件,我可以將其放入任何類 Unix 系統並讓它正常工作。
這讓我想…
- 有沒有我不想使用XPG版本的命令的情況?
- 如果有,什麼時候?
- 難道我不能盲目地添加
/usr/xpg4/bin/
到所有機器上的 rc 文件的開頭$PATH
並放棄將單個命令別名到它們的 XPG* 版本嗎?
- 或者這會導致某些命令出現問題嗎?
- 是否
/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
只使用/bin
and來堅持舊應用程序/usr/bin
,而較新的應用PATH
程序首先使用 POSIX 實用程序。除非您需要向後兼容該 Unix 系統的 1980 年代實用程序,否則最好使用 POSIX 實用程序。在我的
.profile
中,我將以下目錄放在/bin
and之前/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
) 中,不需要任何單獨的目錄。