Panda Noir

JavaScript の限界を究めるブログでした。最近はいろんな分野を幅広めに書いてます。

zshのプロンプトに直前のコマンドの終了ステータスを表示する

zshのprompt内で%?を指定すると直前の終了ステータスを表示させることができます。

PROMPT='[%n@%m]%?# '

↑これで[user@host][last_status]#というプロンプトが表示されます。

ただ、これだと正常終了のときにも表示されて煩わしいので、正常終了のときには表示させないようにします。その結果がこちらです。

local user_host='%F{074}[%n@%m]'
local last_status='%F{red}$([[ $? -ne 0 && $? -ne 130 ]] && echo "[%?]")' # 異常終了のとき(Ctrl-cを除く)にステータスを表示する
PROMPT="$user_host$last_status%f# "

ついでに直前がctrl-cのときも表示しないようにしています。結構僕は押しがちなので…

適用するとこんな感じになります。

余談: ctrl-cのときを除外しないなら

ちなみに、ctrl-cのときにも終了ステータスを表示させて良いのであればもう少し簡潔に書くことができます。

local user_host='%F{074}[%n@%m]'
local last_status='%F{red}%(?..[%?])' # 異常終了のときにステータスを表示する
PROMPT="$user_host$last_status%f# "

参考