グローバルデバッグのために、Bash設定ファイルで-xの代わりに-euxを設定してください。

グローバルデバッグのために、Bash設定ファイルで-xの代わりに-euxを設定してください。

~/.profile私はBashを使うときにデバッグモードを目立つように使うのが好きなので、新しいマシンを取得するたびにコードの最後に追加しますset -x

eu私はそれを追加することを検討しているので、set -eux「ベストプラクティス」にしてください。

わかったらBRマニュアル正しく

  1. e結局、ゼロ以外(通常は間違った)出力を返すコードを実行しないという利点があります。
  2. u-よく理解していませんが、その男はこう言いました。

設定されていない変数と特殊パラメータ「@」、「*」以外のパラメータは、パラメータ拡張時にエラーとして扱われます。エラーメッセージが標準エラーに書き込まれ、非対話型シェルが終了します。

私にはこのように聞こえますが、e設定されていない変数もエラーを引き起こすと見なされ、ゼロ以外の値で終了します。

最高の「一般的な」デバッグを探している人の場合、ここで私が理解した内容は正確でset -eux平均よりも優れていますか?set -x

答え1

これはコメントの問題ですが、set -euインタラクティブに使用するのは悪い考えだと思います。みんながすることは次のとおりです。

  • set -e次の条件が発生するたびにシェルが終了します。管路リストまたは複合コマンドゼロ以外の状態で終了します。
  • set -uシェルが未定義パラメータを拡張しようとするたびに、シェルは終了します。

対話型シェルでは、これはコマンドにエラーがあるとシェルが終了することを意味します!たとえば、コマンド名に誤字が含まれているか、rmファイル名が正しくない、echo $blah変数名が正しくありません。

set -eシェルスクリプトを書くときに便利ですset -u。特にset -e複合エラーを防ぐことができます。コマンドが失敗するとスクリプトが終了するため、後続のコマンドが予想されるコンテキストで実行されない問題を回避できます。

説明とは異なり、ゼロ以外の-e状態を返すコードの実行を防ぐことはできません。ゼロ以外の状態を返すには、コマンドを実行する必要があります。

関連情報