即使命令是别名,是否存在(某种程度上)可靠的方法来获取命令的“原点”?例如,如果我把这个在我的.bash_profile确定UNIX别名的定义位置
alias lsa="ls -A"
,我想在命令行,其中lsa
定义就知道了,这可能吗?我知道which
命令,但似乎并没有这样做。
即使命令是别名,是否存在(某种程度上)可靠的方法来获取命令的“原点”?例如,如果我把这个在我的.bash_profile确定UNIX别名的定义位置
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
此功能将与它是什么类型的命令信息提供:
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
如果一个文件,或者什么如果不存在。它会在最后一种情况下返回一个错误。
你为什么会用'which'? 'type'也可以进行路径查找 - 参见'-P'参数。 – 2016-09-05 20:09:20
虽然type
和which
会告诉你的来源,他们不查找几个步骤。我为此写了一个小程序:origin。举个例子:
[email protected]:~/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
[email protected]:~/projects/origin$
你试过'type'吗?它没有显示它被定义的位置,但确实显示了定义。 – 2012-07-26 01:08:41
@CarlNorum你应该真的只是做出答案。 – kojiro 2012-07-26 01:20:39
@kojiro,它并没有真正回答这个问题,它是关于*定义在哪里的。不过,我认为这将是有用的信息。 – 2012-07-26 01:37:16