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に再代入されるせいで、
コードがわかりにくくなっている。(と思う)