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