命令realpath
实用程序现在由 POSIX 在其第 8 期 (2024) 中定义:realpath — 解析路径名
真实路径 [-E|-e] 文件
realpath 实用程序将规范化文件操作数指定的路径名,如下所示:
如果使用指定路径名作为其第一个参数的函数调用
realpath()
成功,则规范化路径名应为该调用返回的路径名realpath()
。否则:
如果指定了-e选项,规范化将失败。
如果指定了-E
realpath()
选项,则如果以指定路径名作为其第一个参数对函数的调用遇到 [ENOENT] 以外的错误情况,则规范化将失败;如果调用遇到 [ENOENT] 错误,realpath 将扩展所有遇到的符号链接,尝试使用 XBD 4.16 路径名解析中指定的算法来解析指定的路径名,但应忽略任何<slash>
不是前导<slash>
字符的尾随字符。如果此扩展成功,并且扩展路径名的路径前缀解析为现有目录,则规范化路径名应为扩展路径名。在所有其他情况下,规范化都将失败。如果扩展路径名不为空、不以 开头<slash>
,并且只有一个路径名组件,则应将其视为具有路径前缀“./
”。如果未指定任何选项,realpath 将以未指定的方式规范化指定的路径名,使得生成的绝对路径名不包含任何引用符号链接类型文件的组件,也不包含任何点或点点组件。
成功规范化后,realpath 会将规范化的路径名(后跟一个
<newline>
字符)写入标准输出。如果规范化失败,或者规范化的路径名为空,则不会向标准输出写入任何内容,而会向标准错误写入诊断消息,并且 realpath 会以非零状态退出。
[...]
我的问题是:至少 GNU 和 Solaris 已经支持-e
该选项,但我在检查过的所有版本(macOS、FreeBSD、Solaris、GNU)中realpath
都找不到该选项的提及。OpenGroup 发明了它吗?-E
realpath
它确实是一项 POSIX 发明,旨在协调不同实现中的不兼容行为:coreutils
realpath
不需要文件存在,除非-e
指定,而 NetBSDrealpath
要求文件存在。为了解决这个问题,
-E
发明了这个选项;它已经在NetBSDrealpath
中实现:(详情请参阅相应变化。)
该
-E
选项首先出现在这道题中:并介绍了可能的前进方向如下:
您可以在Austin Group 问题 1457中查看 POSIX 条目的历史记录。