我有 command foo
,我怎么知道它是二进制、函数还是别名?
答案1
如果您使用的是 Bash(或其他类似 Bourne 的 shell),则可以使用type
.
type command
会告诉你command
shell 是否是内置的、别名(如果是的话,别名是什么)、函数(如果是的话,它将列出函数体)或存储在文件中(如果是,则为文件的路径) 。
请注意,您可以有嵌套情况,例如函数的别名。如果是这样,要找到实际类型,您需要首先取消别名:
unalias command; type command
有关“二进制”文件的更多信息,您可以执行以下操作
file "$(type -P command)" 2>/dev/null
command
如果是别名、函数或内置 shell,则不会返回任何内容,但如果是脚本或已编译的二进制文件,则返回更多信息。
参考
答案2
在 zsh 中,您可以检查aliases
、functions
和commands
数组。
(( ${+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