如何查看附加到bash别名的命令?


324

假设我在bash shell中有一个别名。是否有一个简单的命令可以打印出别名将运行的命令?

Answers:


431

type内建对这个有用。它不仅会告诉您别名,还会告诉您函数,内建函数,关键字和外部命令。

$ type ls
ls is aliased to `ls --color=auto'
$ type rm
rm is /bin/rm
$ type cd
cd is a shell builtin
$ type psgrep
psgrep is a function
psgrep () 
{ 
    ps -ef | { 
        read -r;
        printf '%s\n' "$REPLY";
        grep --color=auto "$@"
    }
}

type -a cmd会按优先级显示该名称的所有命令,这对于ls上面的别名本身称为的别名很有用ls

$ type -a ls
ls is aliased to `ls --color=auto'
ls is /bin/ls

这告诉您,在运行时ls,除了您自己添加的任何其他参数外,/bin/ls还将使用--color=auto并将其包含在其参数列表中。


别名包含更多别名时该怎么办?
user251046 2014年

2
@ user251046继续使用,type直到您击中别名以外的其他东西……
盖尔哈2014年

我喜欢这个答案,因为type它将解析/解释任何引号,因此您可以确保引号正确。
Wisbucky

我知道了ls is aliased to 'ls --color=auto',但是如何深入一层,看看它使用的是/ bin / ls还是/ usr / local / bin / ls还是什么?
krubo

1
@krubo type -a ls将显示按优先顺序找到的所有ls命令。别名下面的任何一个都将由别名执行。
盖尔哈

163

只需alias在Shell提示符下键入。它应该输出所有当前活动别名的列表。

或者,您可以键入alias [command]以查看特定别名的别名,例如,如果要查找ls别名的别名,则可以这样做alias ls


12
或键入alias ls以找出特定ls别名。
poolie 2012年

2
@poolie确实。我认为问题是要查看所有别名,这就是为什么我没有进一步详细说明alias命令的原因。
汤玛斯·沃德

虽然这适用于别名,但是如果您定义了自定义外壳函数,则将无法使用。type但是,在两种情况下均有效。
Sujay Phadke

53

我真的很喜欢Ctrl+ Alt+ E,因为我从中学到这个答案。它会“扩展”当前键入的命令行,这意味着它将执行别名扩展(以及其他功能)。

这意味着什么?它将把当前可能写在命令行上的任何别名转换为别名所代表的含义。

例如,如果我键入:

$ ls

然后按Ctrl+ Alt+ E,它变成

$ ls --time-style=locale --color=auto

在其他发行版上有这个等同功能吗?
sepehr 2014年

@sepehr适用于Debian,我认为它是一项bash功能,应该可以在任何发行版上使用。
Der Hochstapler 2014年

4
没错,它可以在bash上运行,但是我有zsh,但不幸的是它无法正常工作。
sepehr 2014年

真的很有帮助。我的另一个目标是扩展历史记录中以前的bash命令之一,即!394,以便在执行之前可以先对其进行编辑
XXL

1
它有一个警告。当别名包含必要的引号时,它们将被删除。因此,我得到的squeue -u davidmh -o %.18i %.9P %.25j %.8u %.8T %.10M %.9l %.6D %R 不是squeue -u davidmh -o "%.18i %.9P %.25j %.8u %.8T %.10M %.9l %.6D %R "
Davidmh,

10

严格来说,正确答案是使用BASH_ALIASES数组,例如:

$ echo ${BASH_ALIASES[ls]}
ls -F --color=auto --show-control-chars

2
我发现这种情况在我希望以编程方式访问实际语句的别名而又没有人用的东西的情况下很有用。
M. Justin'Mar

这在zsh中
不起作用

1
@ProGrammar问题是关于bash的问题-对于zsh,您应该查看有关zsh的问题
noonex

1
答对了。正是我所需要的,和@ M.Justin一样-我想在当前ls别名上堆叠更多的开关,而不更改其中的内容。所以我要去alias ls="${BASH_ALIASES[ls]} --time-style=iso"处理我的情况。
Rich

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.