LoginSignup
0

More than 1 year has passed since last update.

bashのinvert変数の使われ方(メモ)

Last updated at Posted at 2021-08-02

bashのexecute_command_internal関数のなかのinvert変数の使いみちが気になったので、調べてみたら、set -e に関連していることがわかった。

bashでset -eを実行すると、スクリプトの処理中にエラーが起きるとすぐに終了させることができる。

例えば、

$ for i in $(seq 10); do saiko; done

とすると、エラーが10回表示されるが、

$ set -e 
$ for i in $(seq 10); do saiko; done

とするとbashは処理に失敗してすぐに終了する。
調べてみたところ、set -e は処理がわかりにくいので推奨されていないらしく、
実際はtrapを使ったほうが良いらしい。

具体的には

$ trap "何かしらの処理" ERR

のようにすると、エラー時にコールバックを設定できる。
set -e と同じことをしたかったら、

$ trap "exit 0" ERR
$ for i in $(seq 10); do saiko; done

とすれば、返り値0ですぐに終了する。

話がそれたが、execute_command_internal(execute_cmd.c)のinvert変数は、このあたりに関係していると思う。


[追記]

invertは関数からの戻り値をひっくり返すためのフラグを一時的に代入する。
invertの値はexecute_command_internal()に渡されたコマンドオブジェクトから求める。
しかし、誰がコマンドの返り値をひっくり返すのか統一感がないのと、invertに再代入されるせいで、
コードがわかりにくくなっている。(と思う)

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0