コマンドがエイリアスであっても、コマンドの「起源」を取得する(ある程度)信頼できる方法はありますか? たとえば、これを .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$