2

我正在为一些包装脚本编写一个设置文件,并将这些脚本映射到底层命令的完成。

在我的 .bash_profile 中,这会将 git 的完成映射到 git_wrapper:

complete -F _git git_wrapper

在我的 setup.sh 中,以下内容不起作用,因为脚本不是交互式的(type _git失败,因为_git在非交互式 shell 中不可用):

if type _git &>/dev/null && ! grep "complete.*_git git_wrapper" ~/.bash_profile &>/dev/null ; then
    echo "complete -F _git git_wrapper" >> ~/.bash_profile
fi

在 setup.sh 中,如何检查 _git 补全是否可用于交互式 shell?

4

1 回答 1

2

从脚本中,我如何检查一个函数是否存在于交互式 shell 中?

您可以通过运行交互式 shell(见下文)并查找它来测试一个函数是否存在于交互式 shell 中。

请注意,“交互式”是此处定义的术语。一方面,如果 shell 在没有任何非选项参数和选项的情况下启动-c,并且它的标准输入和错误都连接到终端,则它是“交互式的”。这很自然,但对您的目的没有那么有用。然而,另一方面,如果 shell以选项启动,那么它也是“交互式的” -i,除了所有其他考虑因素。您的脚本可以使用它在交互式子 shell 中执行测试,但也许更有用的是,您可以使用它来使部分或全部脚本本身在交互式 shell 中运行。

于 2016-08-15T14:40:17.160 回答