Recuperando código de status ao usar pipelines

2

Eu corro o seguinte comando em um script bash:

cd SomeDir && (sh -c "$CMD_STR") 2>&1 | some_filtering | sed -u -e ....

Ou seja. Eu corro CMD_STR em SomeDir (na verdade CMD_STR é 'make' ou 'make target'), faço alguma filtragem na saída de CMD_STR e substituo alguns símbolos por 'sed'.

Eu preciso recuperar o código de status do CMD_STR no caso de o CMD_STR não conseguir retorná-lo do meu script. Como posso fazer isso?

    
por Rom098 09.10.2013 / 07:55

2 respostas

2

A solução é definir a opção 'pipefail' antes de executar o comando.

link

  

Se pipefail estiver habilitado, o status de retorno do pipeline é o valor de   o último comando (mais à direita) para sair com um status diferente de zero ou zero   se todos os comandos saem com sucesso.

Agora, meu script parece com o seguinte:

set -o pipefail
cd SomeDir && (sh -c "$CMD_STR") 2>&1 | some_filtering | sed -u -e ....
exit $?
    
por Rom098 09.10.2013 / 10:25
0

Para verificar o código de status da última saída no bash shell, você pode usar:

echo $?

Além disso, você disse que usa esse comando em um script, para recuperar o código de status, pode executar esse script da seguinte forma:

sh -x /path/to/script

ou

bash -x /path/to/script

Outras opções são usar os comandos set -x e set +x no script para recuperar o código de status de partes do script.

Mais sobre:

por Radu Rădeanu 09.10.2013 / 08:30