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
(...)
(主に)グループ代わりに、コマンドはサブシェルを開始します。したがって、exit
Inは(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
このような場合は無視してください。 ...