Bashスクリプトでさまざまなものをテストしていますが、説明できない問題に遭遇しました。
0以外の終了コードを取得するために意図的に間違ったコマンドを書きましたが、なぜかゼロが出ているようです.
私が実行するコードは次のとおりです。
USER_NAME=$(id -uns)
if [[ ${?} -ne 0 ]]
then
echo "Your command failed to execute with exit code ${?}"
exit 1
fi
echo "Your username is ${USER_NAME}"
私のコードの出力は次のとおりです
id:不明なオプション - s
詳細については、「id --help」を試してください。
終了コード 0 が原因でコマンドが失敗しました。
あなたのユーザー名は
どういうわけかechoコマンドの終了コードを表示していると思いますか?それでも終了コードは0ですが、なぜif文を入力するのですか?
それでは、表示する必要がある実際の終了コードを表示するにはどうすればよいですか?
答え1
コードの文から終了if
ステータスを取得します。印刷テストの終了状態です[[ ${?} -ne 0 ]]
。値は$?
常に最後に実行されたコマンドの終了状態であり、少なくとも値が結果に$?
設定されている限り、テストはコマンドと見なされます。
終了ステータスを印刷するには、id
値が変更されない変数に割り当て、
id -uns
err=$?
if [[ $err -ne 0 ]]; then
printf 'id failed with code %d\n' "$err" >&2
exit 1
fi