6

現在、関数を呼び出して最後のコマンド実行のリターン コードを出力するプロンプトが bash にあります (ゼロでない場合)。

exit_code_prompt()
{
    local exit_code=$?
    if [ $exit_code -ne 0 ]
    then
        tput setaf 1
        printf "%s" $exit_code
        tput sgr0
    fi
}


PS1='$(exit_code_prompt)\$ '

$?これは、別のコマンドが実行されない限りリセットされないことを除いて、かなりうまく機能します。

$ echo "works"
works
$ command_not_found
bash: command_not_found: command not found
127$ 
127$ 
127$ 
127$ echo "works"
works
$

プロンプトで値を繰り返し続けないよう$?に、親シェルの値を初めて実行するときにリセット/設定解除することは可能ですか?exit_code_prompt()

どうもありがとう、スティーブ。

4

1 に答える 1

3

問題は、別のコマンドを発行しないと、$?変更されないことです。したがって、プロンプトが再評価されると、正しく出力され127ます。プロンプトで別のコマンドを手動で入力する以外に、これを回避する方法はありません。

編集:実際には嘘をつきました。状態を保存する方法は常にあるため、値を保存して変更され$?たかどうかを確認し、変更されている場合はプロンプトをクリアできます。しかし、サブシェルにいるため、オプションはかなり制限されています。値を保存するには、ファイルまたは同様に汚れたものを使用する必要があります。

于 2012-08-08T17:02:10.033 に答える