コマンドがゼロ以外の終了コードを返す場合はデフォルト値を提供する

コマンドがゼロ以外の終了コードを返す場合はデフォルト値を提供する

ファイルにいくつかの設定がありconfigcatそのファイルを使用したいと考えています。ただし、config存在しない場合もあります。この場合、コマンドでデフォルト値を出力したいと思います。

おそらく、次のように動作するもの:

$ ls
$ cat config || echo 42
42
$ echo 73 > config
$ cat config || echo 42
73

答え1

あなたの構成は素晴らしいです。次のようなこともできます

cat config || cat defaultconfig

ランダムなコマンド (./get_config_from_webコメント内の など) を使用する場合は、コマンドが適切な戻りステータスを返すことを確認する必要があります。これは難しい場合があります。シェル スクリプトは、最後に実行されたコマンドの結果を返すだけなので、結果として何か他のものが必要な場合は を実行する必要がありますexit

答え2

次の例では、キャッチされないエラー状態に対して 42 がエコーされます。

trap "echo 42" ERR

これを設定可能な変数にすることができます:

trap 'echo "${CONFIG:=42}"' ERR  # if $CONFIG is not set, it will be defaulted to 42

答え3

if [ -a config ]; then cat config; else echo ${DEFAULT};fi

変数 DEFAULT が事前に何かに設定されていると仮定します。

答え4

if ステートメントで終了コードを使用できます。

#!/bin/bash
cat config
if [[ "$?" -ne "0" ]]; then
    echo "VALUE"
fi

前のコマンドが成功した場合は、「0」の値で終了します。つまり、他の終了時 (失敗時) には、「VALUE」の内容が出力されることになります。

関連情報