Oleg Nesterov wrote: > Bob Proulx wrote: > > Is the behavior you observe any different for this case? > > $ bash -c 'while true; do /bin/true || exit 1; done' > > Or different for this case? > > $ bash -e -c 'while true; do /bin/true; done' > > The same.
I expected that to behave differently for you because I expected that the issue was that /bin/true was being delivered the signal but the exit status of /bin/true is being ignored in your test case. In your test case if /bin/true caught the SIGINT then I expect the loop to continue. Since you were saying that it was continuing then that is what I was expecting was happening. > I do not know what "-e" does (and I can't find it in man), but how > this can make a difference? The documentation says this about -e: -e Exit immediately if a pipeline (which may consist of a single simple command), a subshell command enclosed in parentheses, or one of the commands executed as part of a command list enclosed by braces (see SHELL GRAMMAR above) exits with a non-zero status. The shell does not exit if the command that fails is part of the command list immediately following a while or until keyword, part of the test following the if or elif reserved words, part of any command executed in a && or list except the command following the final && or, any command in a pipeline but the last, or if the command's return value is being inverted with !. A trap on ERR, if set, is executed before the shell exits. This option applies to the shell environment and each subshell environment separately (see COMMAND EXECUTION ENVIRONMENT above), and may cause subshells to exit before executing all the commands in the subshell. Using -e would cause the shell to exit if /bin/true returned a non-zero exit status. /bin/true would exit non-zero if it caught a SIGINT signal. Bob