我按照which
中的建议定义了以下man which
功能:
推荐的使用此实用程序的方法是添加一个别名(C shell)或shell函数(Bourne shell),如下所示:
which() { (alias; declare -f) | /usr/bin/which --tty-only --read-alias --read-functions --show-tilde --show-dot $@ } export -f which
与仅查找命令的/usr/bin/which
不同,此函数查找命令,别名和函数。我的问题是为什么将(alias; declare -f)
输送到/usr/bin/which $@
?
/usr/bin/which
未内置到外壳中。因此,除非将内容输入其中,否则它无法访问外壳内部状态(如别名或函数定义)。
这就是这里要做的。
但是,在任何现代shell上,这都是完全不必要。与让外壳本身提供所需的输出相比,向要解析的外部程序提供外壳语法信息与生俱来不可靠。
不要这样做。请使用内置的shell type
。