如何在不覆盖默认值(如果存在)的情况下自定义 $PROMPT_COMMAND?

JBa*_*lin 5 shell bash bashrc rc

Mac 的终端带有默认PROMPT_COMMAND检查历史记录并更新当前工作目录(选项卡的标题):

添加echo $PROMPT_COMMAND到您的顶部,您.bash_profile将看到:

shell_session_history_check; update_terminal_cwd
Run Code Online (Sandbox Code Playgroud)

我想添加我自己的PROMPT_COMMAND而不覆盖默认值。默认值应该在我的自定义之前PROMPT_COMMAND,用分号和空格将两者分开。

请注意,某些程序(例如 IntelliJ 和 VS Code)没有默认值!所以我不想在这种情况下包含空格/分号。

Ben*_* W. 5

我使用的参数扩展:+此:

${parameter:+word}
如果parameter为 null 或未设置,则不替换任何内容,否则替换 的扩展word

一个例子:

$ unset var
$ var=${var:+"$var; "}XXX
$ echo "$var"
XXX
$ var=abc
$ var=${var:+"$var; "}XXX
$ echo "$var"
abc; XXX
Run Code Online (Sandbox Code Playgroud)

所以为了保持现有的命令; 附加,我使用

PROMPT_COMMAND=${PROMPT_COMMAND:+"$PROMPT_COMMAND; "}'mycommand'
Run Code Online (Sandbox Code Playgroud)

如果PROMPT_COMMAND之前为空,则它包含在mycommand之后,如果不是,; 则插入现有命令和mycommand.


JBa*_*lin 2

# If PC contains anything, add semicolon and space
if [ ! -z "$PROMPT_COMMAND" ]; then
    PROMPT_COMMAND="$PROMPT_COMMAND; "
fi

# Add custom PC
PROMPT_COMMAND=$PROMPT_COMMAND'CUSTOM_PC_HERE'
Run Code Online (Sandbox Code Playgroud)