Você pode colocar o grep em uma condição if
, ou se você não se importa com o status de saída, adicione || true
.
Exemplo: grep
mata o shell
$ bash
$ set -e
$ echo $$
33913
$ grep foo /etc/motd
$ echo $$
9233
solução 1: descarte o status de saída diferente de zero
$ bash
$ set -e
$ echo $$
34074
$ grep foo /etc/motd || true
$ echo $$
34074
solução 2: teste explicitamente o status de saída
$ if ! grep foo /etc/motd; then echo not found; fi
not found
$ echo $$
34074
Da página man bash discutindo set -e
:
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 !.