试图理解别名的含义一些命令"句法

时间:2018-03-14 00:06:34

标签: bash alias

alias命令的管道在这里意味着什么?

$ alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

1 个答案:

答案 0 :(得分:3)

这是一个(非便携式)hack让GNU which尝试更像type

bash内置工具不仅可以显示外部命令位置,还可以显示别名,函数等,称为type。当使用别名(或shell函数)调用时,它将发出其定义:

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

因为which是一个外部命令,所以它无法知道别名... 除非它们在stdin上被提供给它:

$ alias                             # we have some aliases defined...
alias ls='ls --color=auto'
alias some-other-alias='whatever'
$ which ls                          # but which doesn't know about them...
/usr/bin/ls
$ alias | which --read-alias ls     # *unless* we feed the definitions to it via stdin
alias ls='ls --color=auto'
    /usr/bin/ls

正如您在上面所看到的,which --read-alias搜索其stdin(假定为别名列表),以查找与所讨论的命令匹配的别名定义,并在其输出上发出该别名。它从shell-builtin alias命令的输出中获取这些定义,该命令在没有参数的情况下调用它们。

这仍然是次等的,只要您知道自己的shell是bash,就应该使用typewhich不同,type知道shell函数;它知道缓存的PATH查找;它保证在所有bash安装时都可用(与GNU which不同,默认情况下在具有非GNU用户空间工具(如MacOS或FreeBSD)的平台上不可用);它可以完成shell内部的所有操作,而无需生成任何外部软件。