30
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

zsh でコマンドが失敗したときにプロンプトの色を変えてエラーを知らせる

Posted at

シェルでコマンドを呼び出したときに、コマンド実行に失敗した場合は終了ステータスとして0以外を返すルールになっている。

% ls -z
ls: 無効なオプション -- 'z'
Try 'ls --help' for more information.
% echo $?
2

上の例のように終了ステータスは echo $? で確認できるんだけど、コマンドが成功したかどうかによってプロンプトの色を変えるようにもできるので紹介する。

こんな感じで.zshrcに書いておけばOK。

autoload -Uz colors
colors
PROMPT="%(?.%{${fg[green]}%}.%{${fg[red]}%})[%n@%m]%{${reset_color}%} %# "

zsh_prompt2.png

前回のコマンド呼び出しに成功したときは緑、失敗したときは赤になってる。プログラムのコンパイルとかしたときに成功したかどうかが分かりやすいので便利。

解説

%(?.xxx.yyy) という形式の記号を使ってる。これをプロンプト文字列として使うと「前回の終了ステータスが0ならxxx、0以外ならyyy」という意味になる。今回の例では「xxx = %{${fg[green]}%}」、「yyy = %{${fg[red]}%}」という風に違う色の指定を埋め込んでいるので、前回のコマンド呼び出しが成功したかどうかによって色が変わるようになってる。

詳細については man zshmisc(1) の「CONDITIONAL SUBSTRINGS IN PROMPTS」の「%(x.true-text.false-text)」を参照。

30
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?