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."