0
Help us understand the problem. What are the problem?

posted at

updated at

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

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
0
Help us understand the problem. What are the problem?