7

即使命令是别名,是否有(某种)可靠的方法来获取命令的“来源”?例如,如果我把它放在我的 .bash_profile

alias lsa="ls -A"

我想从命令行知道在哪里lsa定义,这可能吗?我知道这个which命令,但这似乎并没有。

4

3 回答 3

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
于 2012-07-26T01:12:01.950 回答
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$
于 2016-02-29T20:04:55.723 回答
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文件一样的一行,或者如果不存在则什么都不存在。在最后一种情况下,它将返回错误。

于 2013-07-23T08:54:54.533 回答