如果 PROMPT_COMMAND 中的函数未定义,如何避免来自子 shell 的警告?

Thi*_*ter 2 bash environment-variables

我正在使用以下代码来获得一个很好的提示(包括 git 信息等):

function set_prompt {
    # magic happens in here ;)
}

export PROMPT_COMMAND='set_prompt'
Run Code Online (Sandbox Code Playgroud)

但是,有时在使用某些在内部大量使用 bash 的程序后,我会收到以下警告:

bash:set_prompt:找不到命令

一个很好的例子是 Gentoo 的包管理器emerge,它在错误存在时显示错误。这没什么大不了的 - 只是看起来很丑,不会破坏任何东西。但无论如何我都想摆脱它。

我认为这是因为PROMPT_COMMAND环境变量是由emerge 的 shell 继承的,但函数不是。

有没有办法使PROMPT_COMMAND变量不可继承?或者另一种方法来避免这个烦人的问题?

Gil*_*il' 5

不要导出PROMPT_COMMAND到环境中。环境适用于对所有程序都有意义的变量。但PROMPT_COMMAND仅在 bash 中有用,因此将其保留为 shell 变量。让 bash 的后代实例继承它也没有任何意义:PROMPT_COMMAND仅在 bash 的交互式实例中有用,而且它们都可以阅读.bashrc

PROMPT_COMMAND='set_prompt'
Run Code Online (Sandbox Code Playgroud)