回答:
はい、2つの方法があります。一つは、セットにあるPROMPT_COMMAND
中.bashrc
でセットコマンド置換に-その他、PS1
のためecho $?
のコマンド。
方法1:
bashマニュアルページから:
PROMPT_COMMAND
If set, the value is executed as a command prior to issuing each primary prompt.
この変数を何に設定しても、毎回プロンプトを表示する前に実行されます。デモ:
$> PROMPT_COMMAND=" echo 'Last command exited with' \$? 'code' "
Last command exited with 0 code
$> ls /etc/passwd > /dev/null
Last command exited with 0 code
$> ls /etc/asdf > /dev/null
ls: cannot access /etc/asdf: No such file or directory
Last command exited with 2 code
$>
の使用に注意してください\$?
。永続的な変更のために、それを保存します.bashrc
方法2
私の仮定PS1
プロンプトが次のように設定されています。
PS1='
user@ubuntu:$> '
このプロンプトが画面に再描画されるたびに(前の各コマンドの実行後に)プログラムを実行したい場合command substitution $(. . .)
は、次のように使用してプロンプトで設定する必要があります。
PS1=' [ $? ]
user@ubuntu: $> '
デモ:
$> PS1=' [ $? ]
> $>_ '
[ 0 ]
$>_ ls /etc/passwd > /dev/null
[ 0 ]
$>_ ls /etc/asdf > /dev/null
ls: cannot access /etc/asdf: No such file or directory
[ 2 ]
$>_
私は2行に私のPS1を分割することに注意して、トップがあります[ exitcode ]
し、一番下 $> <blank space>'
。これが、>
前$> '
に2行目にある理由です(先頭>
はPS2
複数行コマンドのプロンプトです)。または、次のようなこともできます($'...'
構造に注意してください)。
$> PS1=$'[ $? ] \n$> '
[ 0 ]
$>
PS1
ユーザー入力を取得する前に印刷される単なるテキストです-それ以上のものはありません。パラメータの拡張やコマンドの置換の影響を受けない$(...)
ため、たとえばに何でも入れることができ、$( pwd )
そこに表示されます。たとえば、ラップトップのバッテリ電力を表示するためにカスタムスクリプトでそれを使用しました
私がArch Wikiから選んだ方法はtrap
ERR
です。trap
信号を受信したとき、または他の特定のイベントのためにコマンドを実行するためにBashで使用されます。ERR
(それが正常に終了しなかった場合、戻り値は明らかに0になります)、戻り値は0ではない-トラップがエラーでいつでも現在のコマンドラインの終了RANです
したがって、たとえば:
trap 'printf "\ncode %d\n\n" $?' ERR
次に:
$ echo foo
foo
$ false
code 1
$
(注:echo
正常に実行されたコマンドの後にメッセージが表示されません- コマンドを入力して端末が何もしないとはどういう意味ですか?)
Arch Wikiのヒントは先に進み、メッセージに色を付けたので、目立つ黄色のメッセージが表示されます。
EC() { echo -e '\e[1;33m'code $?'\e[m\n'; }
trap EC ERR
効果:
実際、私がしなければならないのはcode
、コマンドが失敗したことを知るために、出力の黄色を監視することだけです。