是否有(某种程度上)可靠的方法来获取命令的“起源”,即使该命令是别名?例如,如果我把它放在我的.bash_profile
中alias lsa="ls -A"
我想从命令行知道lsa
的定义,这可能吗?我知道which
命令,但似乎没有这样做。
答案 0 :(得分:15)
正如卡尔在评论中指出的那样,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
答案 1 :(得分:1)
虽然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$
答案 2 :(得分:0)
此功能将提供有关命令类型的信息:
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
这样的行,如果不存在,则会抛出任何内容。它将在最后一种情况下返回错误。