Solução
#!/bin/bash -e
echo "before"
echo "anything" | grep e || : # it would if I searched for 'y' instead
echo "after"
exit
Explicação
set -e
ou set -o errexit
Exit immediately if a pipeline (which may consist of a single simple
command), a list, or a compound command (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 !
. If a compound command other than a subshell
returns a non-zero status because a command failed while -e
was being ignored,
the shell does not exit. A trap on ERR
, if set, is executed before the shell
exits. This option applies to the shell environment and each sub‐ shell
environment separately (see COMMAND EXECUTION ENVIRONMENT
above), and may
cause subshells to exit before executing all the commands in the subshell.
Além disso, :
é o comando sem efeito no Bash.