bashスクリプトでさまざまなことをテストしていますが、説明が得られないという問題が発生しました。

私は意図的に間違ったコマンドを記述して、0とは異なる終了コードを取得しましたが、どういうわけか、まだ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ステートメントに入力されるのですか?

それが問題である場合、表示する必要のある実際の終了コードを表示するにはどうすればよいですか?

回答

コード内のifステートメント内で、を取得する終了ステータス印刷されたは、テスト[[ ${?} -ne 0 ]]の終了ステータスです。値$?は常に最後に実行されたコマンドの終了ステータスであり、少なくともを結果に追加します。

idの終了ステータスを出力する場合は、値が変更されない変数に割り当てます。

id -uns err=$? if [[ $err -ne 0 ]]; then printf "id failed with code %d\n" "$err" >&2 exit 1 fi 

コメント

  • この非POSIXスクリプトは … [[ksh構文の一部であり、インタープリターの一部として実行されますが、組み込みとしては実行されません。コマンド。ただし、インタプリタのこの部分は、記憶されている終了コードをリセットするようです。
  • スクリプトが両方のechoを実行するのはなぜですか?私はそれを期待していました。
  • @pericynthion実際に実行したコードは表示されていません。表示される出力は、 exit 1ステートメントが含まれていないコードのバージョン。おそらく後で追加されました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です