.bashrc
エラーコードを返すことができるコマンドの出力と同じ変数を内部的に設定したいと思います。
私はこのようなことをしたときの結果を知りません。このコマンドが失敗しても、他のすべてはうまくいきますか?
現在のコードは.bashrc
簡単です。
export MYVAR=$(my_dubious_command 2>/dev/null)
これは安全ですか?
答え1
しよう:
$ var=$(false)
$ echo $?
1
$
ただし、.bashrcにこれを設定する可能性はほとんどなく、errexit
次のコマンドはコマンドの終了コードを確認する可能性がはるかに低いため、影響はありません。
.bashrcなどの起動スクリプトは、実行できる操作の1つです。いいえset -o errexit
単純なタイプミスや制御できない変更がシェルからブロックされる可能性があるため、これを行いたいと思います。エラーを検出しても失敗しない場合は、次のようにエラーをキャッチできます。
$ trap 'echo $?' ERR
$ var=$(false)
1
$
これは非常に便利です。早く、例えば。
答え2
asl0b0説明する、.bashrcがerrexit
setで実行される可能性はありませんが、テストによってこのケースを処理できます。
case $SHELLOPTS in
(*errexit*) set +e;
export MYVAR=$(my_dubious_command 2>/dev/null);
set -e
;;
(*) export MYVAR=$(my_dubious_command 2>/dev/null)
;;
esac
作成したとおり、コマンドは、後続のコマンドが無効なオプションを提供していないか、変数名が有効で存在しない関数をエクスポートしていないことをexport
確認する場合は、0を返す必要があります。$?
Caseステートメントがerrexit
設定されていることを確認し、設定されている場合は一時的にオフにして実行しますmy_dubious_command
。