Sil*_*eth 6 compatibility path posix command
我偶尔做旧的Solaris机器其默认的版本上工作grep
的非POSIX兼容的。这会导致我的 rc 文件出现问题,因为grep
机器上的默认设置不支持我需要的选项。
这是我工作地点的一台机器,我不是管理员;所以我不能只安装我认为合适的更新/更好版本的命令。但是,我注意到该机器确实有合适的XPG版本grep
at /usr/xpg4/bin/grep
。
显然,我可以在我的 rc 文件中解决这个问题(对于 Solaris):
alias grep='/usr/xpg4/bin/grep'
Run Code Online (Sandbox Code Playgroud)
但是那些不需要的机器呢?我的目标是为每个 shell 拥有一个单独的 rc 文件,我可以将其放入任何类 Unix 系统并使其正常工作。
这让我想到...
/usr/xpg4/bin/
的开头添加$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
Run Code Online (Sandbox Code Playgroud)
如果没有,为什么不呢?
/bin
一些商业 Unix 系统在和中具有向后兼容的实用程序,以及一个包含 POSIX 兼容实用程序的/usr/bin
目录。/usr/xpg4/bin
这样,旧的应用程序可以PATH
仅使用/bin
和来坚持旧的/usr/bin
应用程序,而较新的应用程序PATH
首先使用 POSIX 实用程序。除非您需要与 Unix 系统中的 20 世纪 80 年代实用程序向后兼容,否则使用 POSIX 实用程序会更好。
在 my 中.profile
,我将以下目录放在/bin
和之前/usr/bin
(如果存在):
/bin/posix
/usr/bin/posix
/usr/xpg6/bin
/usr/xpg4/bin
/usr/xpg2/bin
Run Code Online (Sandbox Code Playgroud)
我认为这至少涵盖了 Solaris、Tru64(又名 Digital Unix,又名 OSF/1)和 HP-UX。
您应该能够通过PATH
调用实用程序找到适合 POSIX 依赖应用程序的路径,而不是自动确定 PATH getconf
:
PATH=$(getconf PATH)
Run Code Online (Sandbox Code Playgroud)
某些系统(例如 *BSD 和 Linux)仅提供 POSIX 兼容的实用程序,因此它们位于常用目录 ( /bin
、/usr/bin
) 中,不需要任何单独的目录。