Como detectar um erro usando a substituição do processo

1

Esta questão é semelhante à seguinte link , mas focado em usar a linha de comando (bash shell).

Usando um exemplo simples, ao fazer o seguinte comando:

$ cat <(date); echo $?
Fri Jul  7 21:04:38 UTC 2017
0

O valor de saída é 0 como esperado.

No comando a seguir, há um erro introduzido propositalmente, mas o valor de retorno ainda é 0:

$ cat <(datE); echo $?
bash: datE: command not found...
Similar command is: 'date'
0

Existe uma maneira de perceber que houve um erro na substituição do processo quando executado na linha de comando (ou seja, sem ter que colocá-lo em um script)?

A solução no link incluído acima mata o script que está executando o comando.

    
por steveb 08.07.2017 / 02:54

1 resposta

0

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.

    
por 08.07.2017 / 04:33