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

Sil*_*eth 6 compatibility path posix command

我偶尔做旧的Solaris机器其默认的版本上工作grep的非POSIX兼容的。这会导致我的 rc 文件出现问题,因为grep机器上的默认设置不支持我需要的选项。

这是我工作地点的一台机器,我不是管理员;所以我不能只安装我认为合适的更新/更好版本的命令。但是,我注意到该机器确实有合适的XPG版本grepat /usr/xpg4/bin/grep

显然,我可以在我的 rc 文件中解决这个问题(对于 Solaris):

alias grep='/usr/xpg4/bin/grep'
Run Code Online (Sandbox Code Playgroud)

但是那些不需要的机器呢?我的目标是为每个 shell 拥有一个单独的 rc 文件,我可以将其放入任何类 Unix 系统并使其正常工作。

这让我想到...

  1. 有没有我不想使用命令的XPG版本的情况?
    • 如果有,什么时候?
  2. 难道我不能盲目地在所有机器上的 rc 文件/usr/xpg4/bin/的开头添加$PATH并放弃将单个命令别名到它们的 XPG* 版本吗?
    • 或者这会导致某些命令出现问题吗?
  3. 这种情况是否/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)

如果没有,为什么不呢?

Gil*_*il' 4

/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) 中,不需要任何单独的目录。