2
0

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 3 years have passed since last update.

コマンド実行時の終了コードを表示する

Last updated at Posted at 2021-07-18

ターミナル/シェルにそんなに詳しくない方から気になることを言われることがありました.

手順書どおり順番にコマンドを入力/実行しましたが, うまくいきません.

手順書には, いくつかの実行コマンドを順番に実行するよう指示するところがあります. そのあとの工程が期待通りにならないと言うのです.

このケースでは手順書の作成者に問い合わせるべきと思います (例が悪い), もうちょっと突っ込んで気にしてみてほしいのは, 「途中のコマンドが失敗していないか」です.

あらゆる実行コマンドには終了コードがある

終了コード.
終了ステータス.

呼称はいろいろですが, あらゆる実行可能なコマンド/ソフトウェアには終了コードがあります.

細かくここでは書けませんが, この終了コードが「0」の場合は正常終了. それ以外の場合はなんらかのエラーであることを表します.

コマンド実行に失敗したら終了コードを表示する

コマンド実行時の出力内容で失敗していることが分かるケースもありますが, 終了コードも同時に確認するべきです.

bash/zshの場合は $? という特別な変数に直前に実行したコマンドの終了コードが入っています.

実行例.

ubuntu@5b0c5a8de6b7:~$ test 1 -eq 2
ubuntu@5b0c5a8de6b7:~$ echo $?
1

fishの場合は $? ではなく $status です.

ただ, コマンド実行するたびにこれをやるのは大変なので, コマンドの終了コードが「0」以外のときにだけ, 終了コードを出力するように設定することができます.

zsh

zshの設定ファイル ( $HOME/.zshrc など) に次の設定を追加します.

setopt print_exit_value

実行例.

ubuntu@5b0c5a8de6b7 ~ % test 1 -eq 2
zsh: exit 1

print_exit_value はzshが標準で備えるオプションです (デフォルトはOFF. zshはデフォルトでほとんどのオプションがOFF).

bash

bashの場合の標準的なやりかたは, 調べてもちょっとわからなったのですが (ご存知のかた教えてください), trapでできそうです. 次の設定をbashの設定ファイル ($HOME/.bashrc など) へ追加します.

trap 'echo exit $?' ERR

実行例.

ubuntu@5b0c5a8de6b7:~$ test 1 -eq 2
exit 1

fish

fishの場合は直前の実行コマンドが失敗している場合, プロンプトに終了コードが表示されるようになっています.

実行例.

ubuntu@b215f2bf0b47 ~> test 1 -eq 2
ubuntu@b215f2bf0b47 ~ [1]>

(おまけ) 終了コードはスクリプトにも応用できる

終了コードはインタラクティブシェル (ここまでで例示したプロンプトが表示された状態でコマンド実行する, 対話式のシェル) だけでなく, シェルスクリプトで使われることもあります.

ifwhile といった制御構文は真偽 (true/false) を判定します.
「0」が真 (true), それ以外が偽 (false) です.

ここで判定に使っているのは終了コードです.
例示するif文はgrepコマンドの終了コードを判定しています.

if grep -q "trap" $HOME/.bashrc; then
    echo "OK"
else
    echo "NG"
fi

よく見かける書き方はこれですかね

if [ $n -eq $m ]; then
    echo "OK"
else
    echo "NG"
fi

[ $n -eq $m ] は testコマンドと同じです.

ubuntu@b215f2bf0b47:~$ test 1 -eq 2
exit 1
ubuntu@b215f2bf0b47:~$ [ 1 -eq 2 ]
exit 1
2
0
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?