在zsh中为“which”绕过“noglob”?

Iva*_*var 5 zsh alias which

我想使用“which”命令来查看实际调用的是哪个可执行文件,但是防御性的“noglob”别名一直在妨碍。是否有快捷方式可用于查找命令别名时调用的可执行文件?

我认为这应该与 shell 无关,但如果重要的话,我正在使用 zsh。

Ada*_*hon 9

您可以使用which -a COMMAND(orwhere COMMANDwhence -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
Run Code Online (Sandbox Code Playgroud)

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

  • 在*zsh*中,`which`、`where`和`whence`都是内置命令,其中`which`等价于`whence -c`,`where`等价于`whence -ca`。他们的文档可以在 `man zshbuiltins` 中找到。虽然有关于 `which` 的手册页,但它不是针对内置命令的,而是针对外部命令的(通常是 `/bin/which` 或 `/usr/bin/which`)。另请参阅命令“which -a which”的输出。 (2认同)