ゼロ以外の終了コードでbashスクリプトが終了しないようにする

ゼロ以外の終了コードでbashスクリプトが終了しないようにする

Bashスクリプトがあり、コマンドの終了コードが0より大きい場合は、スクリプトが終了しないようにする必要があります。これの目的は、カスタムエラーメッセージをエコーすることです。終了コードが0より大きく、echo文が実行されないため、現在のコードは失敗します。ゼロ以外の状態を自動的に無視し、カスタムエラーメッセージを印刷する方法はありますか?

パスワード:

#/bin/bash

# Faulty command
lllll
echo $?
   
if [ "$?" -gt 0 ]; then
    echo "Please enter a valid command."
fi

出力:

./test.sh: line 4: lllll: command not found
127

答え1

あなたは質問を誤解しました。set -eスクリプトに追加してBashに明示的に通知すると、エラーが発生した場合にのみ終了します。ここで何が起こるのかは、この変数が$?最後のコマンド実行の終了コードを保持していることです。あなたの場合、最後のコマンドはそうです。 back にecho $?あるので Since の値は 0 になります。この試み:if [ "$?" -gt 0 ]echo $?$?echo

#!/bin/bash

# Faulty command
lllll
   
if [ "$?" -gt 0 ]; then
    echo "Please enter a valid command."
fi

上記のスクリプトを実行すると、次のようになります。

$ foo.sh
/home/terdon/scripts/foo.sh: line 4: lllll: command not found
Please enter a valid command.

よりきちんとしたアプローチは、エラーメッセージを隠すことです。

#!/bin/bash

# Faulty command
lllll 2> /dev/null
   
if [ "$?" -gt 0 ]; then
    echo "Please enter a valid command."
fi

次を生成します。

$ foo.sh
Please enter a valid command.

もちろん、if次のようなものも必要ありません。

#!/bin/bash

# Faulty command
lllll 2> /dev/null || echo "Please enter a valid command."

関連情報