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

#1 楼

内置的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。 prettyprint-override“> $ type -a ls ls is aliased to `ls --color=auto' ls is /bin/ls

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

评论


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

–user251046
14年7月26日在10:34

@ user251046继续使用类型,直到您击中别名以外的其他内容为止...

– Geirha
2014年9月3日19:03

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

– Wisbucky
18年3月2日在4:21

我将ls别名为'ls --color = auto',但是如何使它更深一层,以查看它是使用/ bin / ls还是/ usr / local / bin / ls还是什么?

–krubo
19年1月29日,下午2:19

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

– Geirha
19年1月30日在7:54

#2 楼

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

或者,如果您想查找alias [command]别名,则可以键入ls以查看特定别名的别名。被别名为,您可以执行alias ls

评论


或键入别名ls来找出ls的别名。

–池
2012年2月7日在4:10

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

–托马斯·沃德♦
2012年2月7日在4:52

虽然这适用于别名,但是如果您定义了自定义外壳函数,则不会起作用。但是,在两种情况下都可以使用。

– Sujay Phadke
16 Sep 24'6:38

#3 楼

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

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

例如,如果我键入:

$ ls


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

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


评论


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

–sepehr
2014年7月3日13:40

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

–霍赫斯塔普勒(Der Hochstapler)
2014年7月3日在16:15

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

–sepehr
2014年7月4日12:46



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

–XXL
16-3-23在12:42



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

– Davidmh
18年5月4日在19:19

#4 楼

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

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


评论


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

–贾斯汀·M
17 Mar 6 '17 at 20:16

这在zsh中不起作用

– ProGrammar
18年4月18日在13:22

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

– noonex
18年4月18日在20:19

答对了。正是我所需要的,和@ M.Justin一样-我想将更多的开关堆叠到当前的ls别名上,而无需更改其中的内容。因此,对于我的情况,我将使用别名ls =“ $ {BASH_ALIASES [ls]} --time-style = iso”。

–丰富
19年5月29日在19:17

#5 楼

您可以使用which命令。

如果将ls的别名设置为ls -al,然后键入which ls,则会看到:

ls: aliased to ls -al

评论


bash没有哪个命令。

– Geirha
2014年9月11日上午9:34

不为我工作

–智利十克林克
16 Mar 15 '16 at 13:34

这是查找别名的一种坏方法,如此处所述:unix.stackexchange.com/questions/10525/…对于Ubuntu上bash中的别名,它甚至对我都不起作用。

– Sujay Phadke
16 Sep 24'6:36