端末の各コマンドの後に終了ステータスコードを印刷します。

端末の各コマンドの後に終了ステータスコードを印刷します。

zsh終了コード値に実行された各コマンドを印刷したいと思います。例えば

$ cat file_not_present
cat: file_not_present: No such file or directory
Exit code 1

端末で開始された最後のコマンドのエラーコードを印刷できることだけを知っています。

$ echo $?

どうですか?

答え1

個人的には、前のコマンドの終了ステータスが失敗した場合、括弧内に太字で表示されるよう%(?..%B(%?%)%b)にmyを追加しました。これは、各コマンドの終了ステータスを印刷するよりも邪魔になりません。$PROMPT

各終了ステータスを印刷します。失敗するコマンドを使用すると、次のことができます。

TRAPERR() print -u2 Exit status: $?
$ false; (123番出口)
終了ステータス:1
終了ステータス:1
終了ステータス:123
(123)$ 

(上記の存在(123)$から)。$PROMPT

各コマンドに対して、次の操作を行います。

TRAPDEBUG() print -u2 Exit status: $?

しかし、これは非常に迷惑かもしれません。

最後のコマンド実行の終了ステータスを印刷することもできます。

print_last_status() print -u2 Exit status: $?
precmd_functions+=(print_last_status)
$ false; (exit 123); true
Exit status: 0

この方法と同様に、$PROMPT前のプロンプトから送信されたコマンドラインでは、最後のコマンド実行状態のみが表示されます。

とにかく、stderrで印刷することは(上記を使用して行ったように-u2)stdoutで印刷するよりも問題が少なくなります。より良い結果が得られますprint Exit status: $? > /dev/tty

答え2

次の項目にカスタム関数を追加できますprecmd_functions

print_status() echo $?
precmd_functions+=(print_status)

すべてのプロンプトの前、つまりコマンドの後に実行されます。

答え3

zshでは、precmdフックを使用して次のことを行うことができます。この回答):

% PROMPT_COMMAND='printf "Exit code: %s\n" $?'
% precmd() { eval "$PROMPT_COMMAND" }
% cat file_not_present
cat: file_not_present: No such file or directory
Exit code: 1               

Bashでは、次の変数を使用できますPROMPT_COMMAND

$ PROMPT_COMMAND='printf "Exit code: %s\n" $?'
$ cat file_not_present
cat: file_not_present: No such file or directory
Exit code: 1

関連情報