Coloque $ PIPESTATUS dentro de um cano

2

Eu uso um script bash para verificar a saída de cron-jobs:

some-cron-script.sh | check_pipe.sh

check_pipe.sh lê o canal e, se encontrar palavras-chave definidas (como 'erro' ou 'falhou'), envia um email. Agora eu gostaria de verificar também o status de saída do primeiro script em check_pipe.sh. Infelizmente, $ {PIPESTATUS [@]} ainda não está definido quando check_pipe.sh é executado. Se eu perguntar ao PIPESTATUS após o pipe em um novo comando, dois valores serão dados - mas para mim é tarde demais. Qualquer ajuda?

Obrigado!

Steven
fonte

Respostas:

1

Armazene a saída em uma variável (se não for muito grande, consulte a capacidade da variável do shell ):

output=$(some-script)
status=$? check-pipe <<<"$output"   # warning: <<< is not POSIX
unset output

Como alternativa, use um arquivo (temporário):

some-script >file
status=$? check-pipe <file
rm file

Nos dois casos, check-pipeobtém a saída de some-scriptvia stdin mais o status de saída como statusvariável de ambiente. Os dois comandos não são executados em paralelo.

Kamil Maciorowski
fonte