デフォルト(存在する場合)をオーバーライドせずに$ PROMPT_COMMANDをカスタマイズするにはどうすればよいですか?

デフォルト(存在する場合)をオーバーライドせずに$ PROMPT_COMMANDをカスタマイズするにはどうすればよいですか?

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単一の文字列に複数のコマンドを含む場合にも機能します。


一般的に使用される macOS bash などの古い 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

おすすめ記事