代码之家  ›  专栏  ›  技术社区  ›  builder-7000

函数中的子shell‘(别名;declare-f)’

  •  0
  • builder-7000  · 技术社区  · 6 年前

    我定义了以下内容 which 功能如中所建议 man which :

    建议使用此实用程序的方法是添加别名(C 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 $@ ?

    1 回复  |  直到 5 年前
        1
  •  0
  •   Charles Duffy    6 年前

    /usr/bin/which 不是内置在外壳中。因此,它无法访问shell内部状态(如别名或函数定义),除非将内容提供给它。

    这就是我们正在做的。

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

    不要这样做。使用shell内置 type 相反

    推荐文章