Bash

如何自定義 $PROMPT_COMMAND 而不覆蓋預設值(如果存在)?

  • August 31, 2018

Mac 的終端帶有預設PROMPT_COMMAND檢查歷史記錄並更新目前工作目錄(選項卡標題):

添加echo $PROMPT_COMMAND到您的頂部,.bash_profile您將看到:

shell_session_history_check; update_terminal_cwd

我想添加自己的PROMPT_COMMAND而不覆蓋預設值。預設值應該出現在我的自定義之前PROMPT_COMMAND,用分號和空格分隔兩者。

請注意,某些程序(例如 IntelliJ 和 VS Code)沒有預設值!所以我不想在這種情況下包含空格/分號。

# 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'

我為此使用參數擴展::+

${*parameter*:+*word*}

如果*parameter為 null 或未設置,則不替換任何內容,否則替換擴展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.

引用自:https://unix.stackexchange.com/questions/466097