mrsh icon indicating copy to clipboard operation
mrsh copied to clipboard

Implement shell '-e' option

Open juniskane opened this issue 10 months ago • 0 comments

POSIX: "When '-e' option is on and when any command fails (for any of the reasons listed in 2.8.1 Consequences of Shell Errors or by returning an exit status greater than zero), the shell immediately shall exit, with the following exceptions:

  1. The failure of any individual command in a multi-command pipeline, or of any subshell environments in which command substitution was performed during word expansion, shall not cause the shell to exit. Only the failure of the pipeline itself shall be considered.
  2. The -e setting shall be ignored when executing the compound list following the while, until, if, or elif reserved word, a pipeline beginning with the ! reserved word, or any command of an AND-OR list other than the last.
  3. If the exit status of a compound command other than a subshell command was the result of a failure while -e was being ignored, then -e shall not apply to this command."

This implementation stores a flag in control flow to keep track, when 'set -e' is allowed to exit shell. This is somewhat unfortunate, but I could not figure out where to put it in AST so that it works correctly for every contrived special case that POSIX spec mandates.

Adds test cases for aforementioned tricky corner cases and we pass them all.

juniskane avatar Jun 09 '25 14:06 juniskane