确定UNIX别名的定义位置

时间:2012-07-26 01:07:32

标签: linux bash shell unix

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

alias lsa="ls -A"

我想从命令行知道lsa的定义,这可能吗?我知道which命令,但似乎没有这样做。

3 个答案:

答案 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)

虽然typewhich会告诉您来源,但他们不会在几个步骤中查找。我为此写了一个小程序: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
}

如果是文件,它会吐出builtinalias等,/bin/ls: Mach-O 64-bit x86_64 executable这样的行,如果不存在,则会抛出任何内容。它将在最后一种情况下返回错误。