Mac 的终端默认会PROMPT_COMMAND
检查历史记录并更新当前工作目录(选项卡的标题):
添加echo $PROMPT_COMMAND
到你的顶部.bash_profile
你会看到:
shell_session_history_check; update_terminal_cwd
我想添加我自己的PROMPT_COMMAND
而不覆盖默认值。默认值应该出现在我的自定义之前,PROMPT_COMMAND
并用分号和空格将两者分开。
请注意,某些程序(例如 IntelliJ 和 VS Code)没有默认值!所以在这种情况下我不想包含空格/分号。
答案1
从 Bash 5.1 开始,PROMPT_COMMAND
可以是数组;您可以添加自己的命令作为第一个执行的命令
PROMPT_COMMAND=(mycommand "${PROMPT_COMMAND[@]}")
如果 的现有值PROMPT_COMMAND
在单个字符串中包含多个命令,这也适用。
对于较旧的 Bash,例如常用的 macOS bash,您可以使用参数扩展为此:+
:
${parameter:+word}
如果parameter
为空或未设置,没有任何内容被替换,否则扩展word
被替换。
一个例子:
$ unset var
$ var=${var:+"$var; "}XXX
$ echo "$var"
XXX
$ var=abc
$ var=${var:+"$var; "}XXX
$ echo "$var"
abc; XXX
因此,为了保留附加的现有命令;
,我使用
PROMPT_COMMAND=${PROMPT_COMMAND:+"$PROMPT_COMMAND; "}'mycommand'
如果PROMPT_COMMAND
之前为空,则mycommand
后面包含,如果不是,;
则插入到现有命令和 之间mycommand
。
答案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'