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

Cas*_*ash 446 command-line bash alias

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

gei*_*rha 589

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 "$@"
    }
}
Run Code Online (Sandbox Code Playgroud)

type -a cmd将按优先顺序显示该名称的所有命令,这对于ls上面的别名很有用,别名本身调用ls.

$ type -a ls
ls is aliased to `ls --color=auto'
ls is /bin/ls
Run Code Online (Sandbox Code Playgroud)

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

  • @krubo `type -a ls` 将按优先顺序显示所有找到的 ls 命令。别名正下方的就是别名将执行的那个。 (4认同)
  • @user251046 继续使用 `type` 直到你遇到别名以外的其他东西...... (3认同)

Tho*_*ard 207

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

或者,您可以键入alias [command]以查看特定别名的别名,例如,如果您想找出ls别名的别名,您可以执行alias ls.

  • 或者输入 `alias ls` 来找出 `ls` 的别名。 (16认同)
  • 虽然这适用于别名,但如果您定义了自定义 shell 函数,则它不起作用。然而,“type”在这两种情况下都有效。 (3认同)
  • @poolie 确实如此。我认为问题是查看*所有*别名,这就是为什么我没有进一步详细说明别名命令。 (2认同)

Der*_*ler 65

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

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

例如,如果我输入:

$ ls
Run Code Online (Sandbox Code Playgroud)

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

$ ls --time-style=locale --color=auto
Run Code Online (Sandbox Code Playgroud)

  • 你是对的,它适用于 bash,但我有 zsh,不幸的是它不起作用。 (5认同)

noo*_*nex 14

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

$ echo ${BASH_ALIASES[ls]}
ls -F --color=auto --show-control-chars
Run Code Online (Sandbox Code Playgroud)

  • 我发现这在我希望以编程方式访问被别名化的实际语句而没有对人类有用的东西的情况下很有用。 (3认同)

小智 6

你可以使用which命令。

ls如果您为as设置别名ls -al然后输入which ls,您将看到:

ls: aliased to ls -al.

  • “which”是查找别名的糟糕方法,如下所述:http://unix.stackexchange.com/questions/10525/how-to-use-which-on-an-aliased-command 它甚至不适用于我在 Ubuntu 上的 bash 中使用别名。 (4认同)
  • 不为我工作.. (2认同)