如何在 zsh 中绕过‘which’的‘noglob’?

如何在 zsh 中绕过‘which’的‘noglob’?

我想使用which命令来查看实际调用了哪个可执行文件,但是防御noglob性别名一直阻碍着我。

是否有一个快捷方式可以用来查找命令别名时调用哪个可执行文件?

我正在使用zshshell。

答案1

您可以使用which -a COMMAND(或where COMMAND或)来查找命令路径中whence -ca COMMAND所有出现的。COMMAND

例如:

% alias ls='noglob ls'
% ls () /bin/ls
% which ls
ls: aliased to noglob ls
% which -a ls
ls: aliased to noglob ls
ls () {
        /bin/ls
}
/bin/ls

由于在执行任何操作之前别名会在命令行中被替换,因此列表中的第二个命令就是您要查找的命令(当然假设第一行以某种方式别名为同一个名字)

答案2

使用which -p例如:

✗ which ls
ls: aliased to ls --color=tty
✗ which -p ls
/bin/ls

https://linux.die.net/man/1/zshbuiltins

(从何而来)-p

对名称进行路径搜索,即使它是别名,保留字,shell 函数或内置函数。

相关内容