即使命令是別名,是否存在(某種程度上)可靠的方法來獲取命令的「原點」?例如,如果我把這個在我的.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