シェルにおけるPOSIX準拠の終了ステータス

shell script preprocess 4/N

公開日: 2021-02-19
更新日: 2024-04-16

  Table of Contents

POSIX準拠における終了ステータス

Def: POSIX

  • POSIX (Portable Operating System Interface) は, UNIX 系 OS 間でアプリケーションの移植性/互換性を高めるために定義された IEEE の標準規格
  • POSIXではコマンド成功の場合は 0, 失敗の場合は 1 ~ 255 のいずれかの値を返すと定めている

POSIX準拠とは, OSやアプリケーションがPOSIX標準の要件を満たしていることを意味します. Linuxコマンドのうち, POSIX準拠しているものは

  • コマンド成功の場合は 0
  • 失敗の場合は 1 ~ 255 のいずれか

というステータス値を返す挙動をします. どのようなexit statusが具体的に設定されているかは man コマンドで確認する必要があります.

lsコマンドのexit status

man lsでExit statusを調べると以下のように定義されています.

1
2
3
4
5
6
   Exit status:
       0      if OK,

       1      if minor problems (e.g., cannot access subdirectory),

       2      if serious trouble (e.g., cannot access command-line argument).

コマンド終了値を格納したシェル変数

シェル変数 利用可能なシェル
$? bash, zsh
$status zsh, csh

$?$statusは直前のコマンドのexitステータスを格納しています.

zshにおける実行例

zshにおける実行例は以下:

1
2
3
4
5
6
7
8
9
10
11
% false
% echo $?
1

% false
% echo $status
1

% true
% echo $?
0


bashにおける実行例

bashにおける実行例は以下:

1
2
3
4
5
6
7
8
9
10
11
$ false
$ echo $?
1

# シェル変数として定義されていないので何も返さない
$ false
$ echo $status

$ true
$ echo $?
0

exit statusを活用したコマンドのつなぎ方

コマンドを連続実行する際,

制御演算子 説明
; exit status関係なく実行
&& 直前のコマンドのexit statusが0なら実行
\|\| 直前のコマンドのexit statusが0以外なら実行

を利用して, コマンドをつないだりします. これはリダイレクションやパイプとは別概念であることに注意してください。

1
2
3
4
5
6
7
8
9
10
11
12
13
% true && echo 'phase 1' || echo 'phase 2' 
phase 1

% false && echo 'phase 1' || echo 'phase 2' 
phase 2

% false ; false && echo 'phase 1' || echo 'phase 2' ; echo 'phase 3'
phase 2
phase 3

% false ; true && echo 'phase 1' || echo 'phase 2' ; echo 'phase 3'
phase 1
phase 3

なお注意点としては, & 単体ではバックグラウンド実行を意味するので入力ミスには気をつけてください.



Share Buttons
Share on:

Feature Tags
Leave a Comment
(注意:GitHub Accountが必要となります)