[Linux] 成功のステータスコードを返すtrueコマンド

trueコマンドは、何も実行しません。何も実行しませんが、終了のステータスコードは成功’0′になります。

true – do nothing, successfully

trueコマンドはGNU Coreutilsに含まれています。ここでは、trueコマンドの基本的な使い方を紹介します。
trueコマンドはシェルの組み込みコマンドにもあり、通常はシェルの組み込みコマンドの方が優先されます。
※以降の実行例は、Ubuntu17.10で確認しています。

1. 使い方

true [args]...
true option

argsに何を与えても無視されます。サポートしていない無効なオプションを指定しても何も実行されず、終了ステータスは0になります。

option 説明
--help ヘルプを表示します
--version バージョンを表示します

2. 実行例

シェル組み込みのtrueコマンドではなく、外部コマンドのtrueを実行するために、コマンドをフルパスで指定しています。

$ /bin/true
$ echo $?
0
$ /bin/true aaa #意味のないargsを指定してみる
$ echo $?
0
$ /bin/true --halp #間違ったoptionを指定してみる
$ echo $?
0

終了コードは’0‘になっています。

3. どのような場合に使うか?

3.1. コマンドやスクリプトの実行を失敗しても、成功とみなしたい場合

ファイルの削除などで、対象ファイルが存在しないエラーが発生してもエラーは無視をして処理を続けたい場合に利用できます。

command || /bin/true

rmコマンドを失敗しても、終了コードは成功にしたい場合の例です。

$ rm hoge
rm: 'hoge' を削除できません: そのようなファイルやディレクトリはありません
$ echo $?
1
$ rm hoge || /bin/true
rm: 'hoge' を削除できません: そのようなファイルやディレクトリはありません
$ echo $?
0

rmコマンドだけの場合に失敗すると、終了コードは’1‘になります。trueコマンドと組み合わせることで、rmコマンドが失敗しても成功’0‘にすることができます。

3.2. ジョブや監視のダミーコマンドとして利用する

trueコマンドは終了ステータスが成功’0‘になるので、ジョブ運用システムや監視システムのコマンド正常終了時の動作確認に利用できます。コマンドの指定箇所などで/bin/trueを指定することで、何も実行はしませんが、終了スタータスコード’0‘のときの動作を確認できます。

3.3. 何もしない処理として利用する

if文などで処理を分岐したときに、何も処理を行わなくてもよい場合があります。処理を何も行わないことを明示的に表すために、trueコマンドを利用することができます。

if [ -f test.txt ]; then
  /bin/true
else
  echo 'message'
fi

3.4. 無限ループの条件として利用する

while文などのループ条件でtrueコマンドを利用することで、無限ループになります。

while /bin/true;do
  echo 'message'
  sleep 1
done

4. trueコマンドの終了ステータスで成功’0’以外を出すことができるか?

trueコマンドは、引数やオプションに何を指定しても終了ステータスは成功である’0‘を返します。ただし、有効なオプションである、--help--versionを指定し、出力先でIOエラーなどが発生した場合、終了ステータスは’0’以外になります。
trueコマンドにヘルプオプションを指定し、出力先をfullデバイスに変更してみます。fullデバイスへの書込みは、ディスクフルエラーとなり失敗します。

$ /bin/true --help > /dev/full
/bin/true: 書き込みエラー: デバイスに空き領域がありません
$ echo $?
1

書込みエラーとなり、trueコマンドの終了ステータスが’1‘になりました。
 
以上、必ず成功のステータスコードを返すtrueコマンドの紹介でした。