BASH:後でPS1で使用するためにPS1に終了コードを保存する方法は?

BASH:後でPS1で使用するためにPS1に終了コードを保存する方法は?

次の方法でPS1をカスタマイズしようとしています(色を削除しました)。

PS1='\u@\h:\w$(git_branch)$(useExitCode)\$ '

どこ

git_branch()
{
    git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}

退室状況はピックアップしたいです。今後関数git_branchが実行されてから使用されますuseExitCode。どうすればいいですか?後者の関数は次のとおりです。

useExitCode()
{
    local exitCode=${1}

    if [[ ${exitCode} == 0 ]]; then
        echo ':)'
    else
        echo ':('
    fi
}

問題は、PS1に終了コードをどのように保存し、後で使用できるかということです。

次のことはうまくいきませんが、一般的な方向のアイデアを提供します。

PS1='exitCode=$?\u@\h:\w$(git_branch)$(useExitCode ${exitCode})\$ '

上記のechoは「exitCode = 0」(または= 1)部分ですが、保存されていないため、後で「$ {exitCode}」を呼び出すと空です。

ベストアンサー1

PROMPT_COMMANDこれには変数を使用します。

PROMPT_COMMAND='lstatus=$?'
PS1='$(false)$(exit 3)<$lstatus> '

<0> sh -c 'exit 17'
<17> echo $?
17
<0>

bash(1)マンページから:

PROMPT_COMMAND設定すると、この値はコマンドとして実行されます。以前すべての主要なヒントを送信してください。

おすすめ記事