Subshel l`(alias;声明-f)在函数中

问题描述 投票:0回答:1

我按照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 $@

bash function alias which
1个回答
0
投票

/usr/bin/which未内置到外壳中。因此,除非将内容输入其中,否则它无法访问外壳内部状态(如别名或函数定义)。

这就是这里要做的。

但是,在任何现代shell上,这都是完全不必要。与让外壳本身提供所需的输出相比,向要解析的外部程序提供外壳语法信息与生俱来不可靠。

不要这样做。请使用内置的shell type

© www.soinside.com 2019 - 2024. All rights reserved.