alias
命令的管道在这里意味着什么?
$ alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
答案 0 :(得分:3)
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,就应该使用type
。与which
不同,type
知道shell函数;它知道缓存的PATH查找;它保证在所有bash安装时都可用(与GNU which
不同,默认情况下在具有非GNU用户空间工具(如MacOS或FreeBSD)的平台上不可用);它可以完成shell内部的所有操作,而无需生成任何外部软件。