在“命令搜索和执行”部分,POSIX 规范表示PATH
在查找要执行的实用程序时会搜索 (有一些例外)。规范是否提到PATH
将初始化为保证找到所有标准实用程序的值的任何地方?
或者我是否需要执行类似以下操作以保证在尝试运行标准实用程序时永远不会出现“命令未找到”错误?
PATH=$(command -p sh -c 'printf %s "${PATH}"')
答案1
是的,也不是。在 POSIX 环境中,实用程序的行为必须符合规范的描述。实际上,这意味着实用程序的符合版本必须存在于$PATH
.但是,当在符合 POSIX 标准的系统上运行程序时,您可能会在不符合要求的环境中运行它。实际中经常出现的情况是操作系统有legacy模式和POSIX模式,并且默认是legacy模式。比缺少某些命令更糟糕的是,遗留模式往往存在不兼容性,例如具有不同含义的选项。
PATH
您可以通过以下方式检索商品getconf
。当然,这很棘手,因为getconf
原来的$PATH
可能不是正确的。应用程序用途命令展示了一种方法:
command -p getconf PATH
据我了解规范,如果您在符合 POSIX 的环境中运行程序,则没有必要这样做;如果您没有在符合 POSIX 的环境中运行程序,则 POSIX 不适用。然而,这个应用程序的使用可以被视为一个建议:如果这不起作用,您可以有权向您的供应商抱怨,无论他们对 POSIX 规范的文字做了什么,他们都没有遵守其精神。