如何测试命令是别名、函数还是二进制?

如何测试命令是别名、函数还是二进制?

我有 command foo,我怎么知道它是二进制、函数还是别名?

答案1

如果您使用的是 Bash(或其他类似 Bourne 的 shell),则可以使用type.

type command

会告诉你commandshell 是否是内置的、别名(如果是的话,别名是什么)、函数(如果是的话,它将列出函数体)或存储在文件中(如果是,则为文件的路径) 。

请注意,您可以有嵌套情况,例如函数的别名。如果是这样,要找到实际类型,您需要首先取消别名:

unalias command; type command

有关“二进制”文件的更多信息,您可以执行以下操作

file "$(type -P command)" 2>/dev/null

command如果是别名、函数或内置 shell,则不会返回任何内容,但如果是脚本或已编译的二进制文件,则返回更多信息。

参考

答案2

在 zsh 中,您可以检查aliasesfunctionscommands数组。

(( ${+aliases[foo]} )) && print 'foo is an alias'
(( ${+functions[foo]} )) && print 'foo is a function'
(( ${+commands[foo]} )) && print 'foo is an external command'

还有builtins, 用于内置命令。

(( ${+builtins[foo]} )) && print 'foo is a builtin command'

编辑:检查zsh/参数模块有关可用数组的完整列表的文档。

答案3

答案取决于您使用的 shell。

对于 zsh,shell 内置命令whence -w会准确地告诉你你想要什么

例如

$ whence -w whence
whence : builtin
$ whence -w man     
man : command 

相关内容