No seu exemplo:
cat <(datE); echo $?
O que acontece é que datE
lança o erro e não gera saída. Em seguida, ele lança um código de erro. No entanto, a entrada (nula) é então apresentada a cat
, que felizmente não mastiga nada, e agora seu código de saída é zero.
Se você der o passo intermediário, ele funcionará como esperado:
$ datE; echo $?
datE: command not found
127
Se você quiser que bash
aborte quaisquer falhas em um pipeline e qualquer erro não detectado, execute os dois comandos a seguir:
set -e
set -o pipefail
Outras camadas podem fornecer configurações semelhantes.