“sh”是否必须在“/bin”目录中?

use*_*294 17 linux shell posix

我已经读到符合 POSIX 的操作系统(例如:Linux)必须有shshell。

但是它必须sh/bin目录中,还是可以在任何目录中?

Mic*_*mer 23

POSIX只强制要求/dev/tmp目录的存在,以及/dev/null/dev/tty/dev/console文件。标准实用程序必须存在,但没有指定特定位置。可能根本没有 a /bin,如果有,则可能不包含 a sh,如果有,则可能不是 POSIX sh

您可以使用以下命令获取PATH包含 POSIX 工具(包括 )的有效变量:shgetconf

$ PATH=$(getconf PATH)
$ sh
Run Code Online (Sandbox Code Playgroud)

例如,这在 Solaris 上很有用,其中默认sh值不是 POSIX-compatible,但sh提供了一个兼容的并且可以通过这种方式访问​​(因为Solaris 是经过认证的 Unix)。getconf PATH将包括/usr/xpg4/bin在前面,其中包含 POSIXsh和许多其他必需的工具(包括无用的cd工具,例如)。

  • 那么如何找到 getconf 呢? (2认同)

Joh*_*024 12

不,不需要sh/bin. 它明确引用/bin/usr/bin/usr/xpg4/bin可能的位置。POSIX 规范只要求sh在 PATH 中。

POSIX规范状态:

应用程序应注意,shell 的标准 PATH 不能假定为/bin/sh/usr/bin/sh,并且应通过查询 getconf PATH 返回的 PATH 来确定,确保返回的路径名是绝对路径名而不是 shell 内置。

例如,要确定标准 sh 实用程序的位置:

command -v sh

在某些实现中,这可能会返回:

/usr/xpg4/bin/sh