バックティック演算子が失敗した場合のbashを印刷して終了する方法

バックティック演算子が失敗した場合のbashを印刷して終了する方法

getinfo.sh情報を印刷するか、コード1が存在します。

このスクリプトの結果をbash変数に保存したいと思います。それ以外の場合は、エラーメッセージを印刷して終了します。

私がこれを実行すると

#!/bin/bash
X=`getinfo.sh` || echo "failed" && exit 1

これにより、スクリプトは成功しても終了しますgetinfo.sh(この場合は何も印刷しません)。

一方、

X=`getinfo.sh` || (echo "failed" && exit 1)

私にはCのような言語から来たので、これは意味がありますが、いいえ角かっこは、新しい内部シェルを作成して終了する内部シェルであり、シェルは引き続き実行されるため、スクリプトを終了します。

getinfo.sh印刷された出力を保存して失敗した場合は終了できますか?

ベストアンサー1

(...)(主に)グループ代わりに、コマンドはサブシェルを開始します。したがって、exitInは(echo failed && exit 1)サブシェルのみを終了します。

サブシェルで実行せずにコマンドをグループ化するには、次のものを使用できます{ ...; }

X=`getinfo.sh` || {
  echo >&2 "failed"
  exit 1
}

ここでは、以下を使用したいと思います。

if ! x=$(getinfo.sh); then
  echo >&2 failed
  exit 1
fi

また、たとえば、stdout がファイルシステム全体のファイルであるか、壊れたパイプが SIGPIPE を無視するか、stdout がクローズされた場合、または SIGXFSZ のファイルサイズ制限に達した場合など、それ自体が失敗した場合、echo failed && exit 1シャットダウンはできません。echoこのような場合は無視してください。 ...

おすすめ記事