Ric*_*sen 11 standard path posix
在“命令搜索和执行”部分,POSIX 规范说PATH在查找要执行的实用程序时会搜索它(有一些例外)。规范是否提到PATH将被初始化为保证所有标准实用程序都可以找到的值的任何地方?
或者我是否需要执行以下操作以保证在尝试运行标准实用程序时永远不会出现“找不到命令”错误?
PATH=$(command -p sh -c 'printf %s "${PATH}"')
Run Code Online (Sandbox Code Playgroud)
(请参阅实用程序的POSIX 规范command)
Gil*_*il' 13
是和否。在 POSIX 环境中,实用程序必须按照规范的描述运行。实际上,这意味着实用程序的符合版本必须存在于$PATH. 但是,在符合 POSIX 的系统上运行您的程序时,您可能是在不符合要求的环境中运行它。在实践中,经常发生的情况是操作系统有 legacy 模式和 POSIX 模式,并且默认处于 legacy 模式。比遗漏一些命令更糟糕的是,传统模式往往在它们之间存在不兼容,例如具有不同含义的选项。
您可以获取良好的PATH使用getconf。当然,这很棘手,因为getconf原始版本$PATH可能不是正确的。命令的应用程序用法显示了一种方法:
command -p getconf PATH
Run Code Online (Sandbox Code Playgroud)
据我了解规范,如果你在符合 POSIX 的环境中运行你的程序,这不是必需的;如果您不是在符合 POSIX 的环境中运行程序,则 POSIX 不适用。但是,此应用程序用法可以作为建议:如果这不起作用,您可以向您的供应商抱怨他们对 POSIX 规范的文字所做的任何事情,他们都没有遵守其精神。