我使用的是 Ubuntu 20.04,我通常需要找到给定命令的最终可执行路径。我们awk
举个例子:
file $(which awk)
# Output: /usr/bin/awk: symbolic link to /etc/alternatives/awk
file /etc/alternatives/awk
# Output: /etc/alternatives/awk: symbolic link to /usr/bin/gawk
我的问题是:
是否有一个命令(或命令的标志file
)将直接返回给定命令的最终路径?在上面的示例中,我希望它返回gawk
谢谢
您可以使用
readlink
:来自
man readlink
:我发现了另一个命令
realpath
:在
zsh
中,如果您在变量中有命令名称$cmd
,$cmd:c
将扩展为命令路径¹(通过查找$PATH
/$path
),并且:P
限定符可用于获取相应的实际路径(无符号链接的规范绝对路径使用realpath()
标准 C 函数时的文件):为避免中间变量,您可以使用匿名函数:
或正常功能:
您还可以使用
=cmd
运算符,它是文件名扩展的一种形式,如波浪号扩展,但扩展为相应命令的路径,此时仍将:P
修饰符应用为glob 限定符²:¹但是请注意,如果在 , 中找不到命令
$PATH
,$cmd:c
将扩展为与 , 相同的内容$cmd
,并将扩展为相对于当前工作目录$cmd:c:P
的路径。$cmd
² 这次找不到命令时,会触发致命错误。可以通过以下方式禁用该
=cmd
扩展set +o equals
如果您想告诉
file
Linux 上的命令返回有关awk
命令的信息,并在这样做时解析所有符号链接,请使用file
其-L
选项:要解析所有链接以获取命令的最终绝对路径,请使用
readlink -e
: