2016-08-06 6 views
2

私は、次の(単純化)関数を使用しての.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を使用します。

答えて

2

set_promptsまたは$?がリセットされる前に、exit_status_promptに電話する必要があります。おそらく、exit_status_promptは、最後に実行されたコマンドまたは割り当ての終了ステータスを使用すると考えられます。

set_prompts() { 
    esp=$(exit_status_prompt) 
    PS1="\[email protected]\h in \w " 
    PS1+="$(get_git_repo_details)" 
    PS1+="\n" 
    PS1+="$esp" 
} 

私はあなたが(とあるべき)ことを前提としていたので、私はPROMPT_COMMANDの最初のコマンドとしてset_promptsを実行するには、コマンド置換をエスケープを解除しました。

+0

ありがとう、chepner。しかし、これは私の質問に答えていないようです。私は 'PROMPT_COMMAND'を使って簡単に動作させることができます。しかし、PS1 + = "$ esp"をPS1 + = "$(get_git_repo_details)" "の上に移動しないと、開始時に' esp'を設定しても、なぜ更新されないのか理解できません。 –

+0

'exit_status_prompt'がどのようなものか分からないので、私はそれに正確に答えることができません。しかし、*すべての*コマンドは '$?'を更新し、 'exit_status_prompt'が' $? 'の現在の値を調べると仮定します。あなたの例では、 'PS1 + =" \ n "'は 'exit_status_prompt'が呼び出されるたびに値を' 0'にリセットします。 – chepner

+0

PS1 + = "$ n"とPS1 + = "\ $(exit_status_prompt)"の行を 'PS1 + =" $(get_git_repo_details) "'の上に移動すると、正しく変更されます。 'exit_status_prompt'関数を表示するための質問を更新しました。 –

関連する問題