私は、次の(単純化)関数を使用しての.bashrcに私のbashプロンプトを設定しています:バッシュプロンプト複数のコマンド置換
set_prompts() {
PS1="\[email protected]\h in \w "
PS1+="\$(get_git_repo_details)"
PS1+="\n"
PS1+="\$(exit_status_prompt)"
}
今exit_status_prompt
は$?
の値かどうかに応じて、異なる色のプロンプト文字を印刷します0か否かを判定する。
私が気づいたのは、上記のコードでは、プロンプト文字の色は決して更新されません。しかし、get_git_repo_details
の出力を追加する前にexit_status_prompt
の出力を$PS1
に追加するか、get_git_repo_details
の出力を全く追加しないと、更新されます。
誰でも原因を知っていますか?ありがとう。
編集:
exit_status_prompt()
{
if [ $? -ne 0 ]
then
highlight 1 "❯ "
else
highlight 2 "❯ "
fi
}
highlight
関数は、次にちょうど最初のパラメータで指定された色を有する第二のパラメータの文字列を付加するtput
を使用します。
ありがとう、chepner。しかし、これは私の質問に答えていないようです。私は 'PROMPT_COMMAND'を使って簡単に動作させることができます。しかし、PS1 + = "$ esp"をPS1 + = "$(get_git_repo_details)" "の上に移動しないと、開始時に' esp'を設定しても、なぜ更新されないのか理解できません。 –
'exit_status_prompt'がどのようなものか分からないので、私はそれに正確に答えることができません。しかし、*すべての*コマンドは '$?'を更新し、 'exit_status_prompt'が' $? 'の現在の値を調べると仮定します。あなたの例では、 'PS1 + =" \ n "'は 'exit_status_prompt'が呼び出されるたびに値を' 0'にリセットします。 – chepner
PS1 + = "$ n"とPS1 + = "\ $(exit_status_prompt)"の行を 'PS1 + =" $(get_git_repo_details) "'の上に移動すると、正しく変更されます。 'exit_status_prompt'関数を表示するための質問を更新しました。 –