即使命令是别名,是否有(某种)可靠的方法来获取命令的“来源”?例如,如果我把它放在我的 .bash_profile
alias lsa="ls -A"
我想从命令行知道在哪里lsa
定义,这可能吗?我知道这个which
命令,但这似乎并没有。
正如卡尔在他的评论中指出的那样,这type
是找出名称是如何定义的正确方法。
mini:~ michael$ alias foo='echo bar'
mini:~ michael$ biz() { echo bar; }
mini:~ michael$ type foo
foo is aliased to `echo bar'
mini:~ michael$ type biz
biz is a function
biz ()
{
echo bar
}
mini:~ michael$ type [[
[[ is a shell keyword
mini:~ michael$ type printf
printf is a shell builtin
mini:~ michael$ type $(type -P printf)
/usr/bin/printf is /usr/bin/printf
虽然type
并且which
会告诉您来源,但他们不会在几个步骤中查找。我为此写了一个小程序:origin。一个例子:
alext@smith:~/projects/origin$ ./origin ll
'll' is an alias for 'ls' in shell '/bin/bash': 'ls -alF'
'ls' is an alias for 'ls' in shell '/bin/bash': 'ls --color=auto'
'ls' found in PATH as '/bin/ls'
'/bin/ls' is an executable
alext@smith:~/projects/origin$
此函数将提供有关它是什么类型的命令的信息:
ft () {
t="$(type -t "$1")";
if [ "$t" = "file" ]; then
if which -s "$1"; then
file "$(which "$1")"
else
return 1
fi
else
echo $t
fi
return 0
}
它要么吐出builtin
,alias
等,像/bin/ls: Mach-O 64-bit x86_64 executable
文件一样的一行,或者如果不存在则什么都不存在。在最后一种情况下,它将返回错误。