Você não pode usar
case somecommand in ...
porque:
case word in [ [(] pattern [ | pattern ] ... ) list ;; ] ... esac
Observe word
, ou seja, uma string.
Usar $(true)
não funciona, pois true
não produz saída na saída padrão.
Eu sugeriria:
{ somecommand; err="$?"; } || true
case "$err" in ...
Isso interromperá a execução do script em errexit
( -e
) da saída.
Do manual bash
(da descrição de 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 !.