查找 bash 命令的定义或来源?

Cor*_*ein 4 shell bash alias which

有时我想知道我输入的命令bash实际上计算了什么。通常我可以很容易地找出可执行文件的位置which

$ which vim
/usr/bin/vim
Run Code Online (Sandbox Code Playgroud)

但是,如果我已经创建了一个别名vim呢?

$ alias vim="echo mwahaha"
$ which vim
/usr/bin/vim
Run Code Online (Sandbox Code Playgroud)

嗯,不好。如果我怀疑某事并想检查是否vim已使用别名,我知道我可以输入

alias vim
Run Code Online (Sandbox Code Playgroud)

...但如果我有一个alias vim='vim -p',我实际上永远不会考虑检查vim别名,因为它仍然可以正常工作。

我如何才能确切知道bash正在评估的特定命令是什么?

Chr*_*own 10

使用type,这是 bash 内部的。

$ type vim
vim is /usr/bin/vim
$ type -p vim
/usr/bin/vim
$ alias vim="echo mwahaha"
$ type vim
vim is aliased to `echo mwahaha'
$ type -p vim
$
Run Code Online (Sandbox Code Playgroud)

在Stephane Chazelas 的这个答案中,对获取有关命令的信息的不同方法进行了很好的细分。您不应该依赖which,即使是非恶意的,它也不知道您的 shell 的哈希查找表,这可能会导致问题。