在“命令搜索和执行”部分中,POSIX规范指出PATH
在找到要执行的实用程序时会进行搜索(某些例外)。规范中是否提到了PATH
将初始化为可确保找到所有标准实用程序的值的任何地方?
还是我需要执行以下操作以确保在尝试运行标准实用程序时永远不会出现“找不到命令”错误?
PATH=$(command -p sh -c 'printf %s "${PATH}"')
(请参阅实用程序的POSIX规范command
)
在“命令搜索和执行”部分中,POSIX规范指出PATH
在找到要执行的实用程序时会进行搜索(某些例外)。规范中是否提到了PATH
将初始化为可确保找到所有标准实用程序的值的任何地方?
还是我需要执行以下操作以确保在尝试运行标准实用程序时永远不会出现“找不到命令”错误?
PATH=$(command -p sh -c 'printf %s "${PATH}"')
(请参阅实用程序的POSIX规范command
)
Answers:
是的,没有。在POSIX环境中,这些实用程序的行为必须符合规范中所述。实际上,这意味着必须在中存在实用程序的符合版本$PATH
。但是,在符合POSIX的系统上运行程序时,可能会在不合格的环境中运行它。实际上,通常会发生这种情况,即OS具有传统模式和POSIX模式,并且默认情况下处于传统模式。比遗漏一些命令更糟的是,传统模式在其中往往具有不兼容的地方,例如具有不同含义的选项。
您可以获取良好的PATH
使用getconf
。当然,这很棘手,因为getconf
原始版本$PATH
可能不合适。“应用程序用法” 命令显示了一种实现方法:
command -p getconf PATH
据我了解的规范,如果您在符合POSIX的环境中运行程序,则不需要这样做。并且如果您不在符合POSIX的环境中运行程序,则POSIX不适用。但是,可以将这种应用程序用法作为建议:如果这种方法不起作用,您可以向您的供应商投诉,他们抱怨他们对POSIX规范的文字所做的任何事情,都不符合其精神。
getconf PATH
至在应用程序使用情况部分中都没有注意到这一点。谢谢!