web-dev-qa-db-ja.com

set -euxではなく、グローバルデバッグ用にBashプロファイルで-xを設定します

Bashで作業するときは、目立つデバッグモードで作業するのが好きなので、新しいマシンを入手するたびに、~/.profileの末尾にコードset -xを追加します。

euも追加することを検討しているので、set -euxを「ベストプラクティス」として使用します。

BRマニュアル を正しく理解している場合

  1. eを使用すると、最終的にゼロ以外の(通常は誤った)出力を返すコードを実行しないという利点があります。
  2. u-よくわかりませんでした。

設定されていない変数や、特別なパラメーター ‘@’または ‘*’以外のパラメーターは、パラメーター展開を実行するときにエラーとして扱います。エラーメッセージが標準エラーに書き込まれ、非インタラクティブシェルが終了します。

eのように聞こえますが、設定されていない変数をエラーの原因として扱い、ゼロ以外で終了することもできます。

ここでの私の理解は正確であり、set -euxは、一般的なset -xよりも、一般的なデバッグを求める人にとって一般的に優れていますか?

5
user149572

これは意見の問題ですが、set -euはインタラクティブな使用には適していません。それぞれの機能は次のとおりです。

  • set -eパイプラインリスト 、または 複合コマンド がゼロ以外のステータスで終了すると、シェルは終了します。
  • set -uは、シェルが定義されていないパラメーターを展開しようとするたびにシェルを終了します。

対話型シェルでは、これは、コマンドに誤りがあるとシェルが終了することを意味します。たとえば、コマンド名のタイプミス、またはrmが正しくないファイル名、またはecho $blah変数名が正しくありません...

set -eおよびset -uは、シェルスクリプトを作成するときに役立ちます。特に、 set -e複合エラーを回避します。コマンドが失敗するとすぐにスクリプトが終了するため、後続のコマンドが予期したコンテキストで実行されないことによるトラブルを回避できます。

説明と比較して、-eは、ゼロ以外のステータスを返すコードの実行から保護しません。ゼロ以外のステータスを返すには、コマンドを実行する必要があります。

13
Stephen Kitt