ウェブサイト検索

Linuxでコマンドの終了ステータスを確認する方法


Linuxシステムで作業する際、実行するすべてのコマンドは、正常に実行されたかどうかを示すステータスコード(終了ステータスまたはリターンコードとも呼ばれる)を返します。

Linuxユーザーとして、特にシェルスクリプトを学んでいる場合やトラブルシューティングをしている場合、コマンドの終了ステータスを確認する方法を知っておくことは非常に重要です。

この記事では、終了ステータスが何を意味するのか、どのように確認するのか、そしてなぜ重要なのかを説明します。

Linuxにおける終了ステータスとは何ですか?

Linuxでコマンドを実行するたびに、システムは最後に静かにスコアカードを与えます。それは単に終了ステータス(またはリターンコード)と呼ばれる数字です。

  • もし番号が0であれば、それはコマンドがエラーなく正常に実行されたことを意味します。
  • もしその数が0でなければ、それはコマンドが何らかの形で実行に失敗したことを意味します。

こう考えてみてください:

  • 0=「すべて順調!」
  • 1=“何かがうまくいかなかった(一般的なエラー)”
  • 2、127、126など=「ファイルが見つかりません」や「コマンドが実行できません」のような、さまざまな種類の問題。

これらの数字が画面に常に表示されるわけではありませんが、Linuxはそれらを$?という特別な変数に保存します。最後のコマンドが成功したか失敗したかを知りたいときは、いつでもこれを確認できます。

ヒント: これらの終了コードは、コマンドが成功したか失敗したかに応じて判断を下すのに役立つため、Bashスクリプトを書くときに特に重要です。

コマンドの終了ステータスを確認する方法

Linuxでは、実行した最後のコマンドの終了ステータスは、次の特別なシェル変数に格納されます:

$?

「終了ステータス」を理解する最良の方法は、実際にコマンドを実行してみることです。

例 1: 成功したコマンド

ls
echo $?

ここで何が起こるか:

  • まず、ls は現在のディレクトリ内のファイルを一覧表示します。
  • コマンドが問題なく実行されたので、Linux は終了ステータスを 0 に設定します。
  • 私たちが echo $? を使ってすぐにステータスを確認すると、0 が表示されます。

0 の終了コードは常に成功を意味します。したがって、この場合、ls コマンドは私たちが期待した通りに動作しました。

例 2: 失敗したコマンド

ls /nonexistent
echo $?

ここで何が起こるか:

  • 私たちは、/nonexistentというディレクトリ内のファイルを一覧表示しようとしました。
  • そのディレクトリはシステム上に存在しないため、ls コマンドは失敗します。
  • その後、Linux は終了ステータスをゼロ以外の数値(この場合は 2)に設定します。
  • <code>echo $?</code>で確認すると、次のように表示されます:

例 3: スクリプトでの終了ステータスの使用

終了ステータスは、シェルスクリプト内で使用すると非常に役立ちます。なぜなら、スクリプトはコマンドが成功したか失敗したかに基づいて判断を行う必要があることが多いためです。

簡単な例を見てみましょう。

#!/bin/bash

ls /etc > /dev/null
if [ $? -eq 0 ]; then
    echo "Command successful!"
else
    echo "Command failed!"
fi

ここで何が起こるか:

  • もし ls コマンドが動作する場合 → 「コマンド成功!」と表示されます。
  • もし失敗した場合 → 「コマンドが失敗しました!」と表示します。

よりクリーンな方法: && と || の使用

毎回 $? を確認する代わりに、コマンドを連鎖させることができます:

  • command && echo "Success" → 最初のコマンドが成功した場合にのみ、2番目のコマンドを実行します。
  • command || echo "Failed" → 最初のコマンドが失敗した場合にのみ、2つ目のコマンドを実行します。

例:

ls /etc && echo "Found it!" || echo "Not found!"

一般的な終了ステータスコード

ここに、よく見られる終了コードをいくつか示します:

終了コード意味
成功
1一般的なエラー
2シェルコマンドの誤用
126コマンドが見つかりましたが、実行できません
127コマンドが見つかりません
130スクリプトはCtrl+Cで終了されました
255終了ステータスが範囲外です
最終的な考え

終了ステータスは小さな数字ですが、コマンドを対話的に実行したり、シェルスクリプトを書く際に重要な役割を果たします。終了コードを理解することで、問題のデバッグやワークフローの管理が容易になります。

次にコマンドが期待通りに動作しないときは、エラーメッセージだけを見るのではなく、終了ステータスも確認してください!