Eu quero fazer algo como:
command || log $error_from_last_command
Existe uma maneira de usar ||
e ainda acessar stderr
como um cachimbo?
Minha intenção aqui é processar a mensagem de erro de command
, usando log
, mas somente se command
falhar. Estou lendo a duplicata marcada, mas não vejo como aplicar isso à minha situação.
Se você quiser usar a saída de um programa em outro que só seja executado após a conclusão do primeiro comando, provavelmente é mais fácil armazenar a saída em um arquivo.
Canalizar a saída exigiria que os comandos fossem executados ao mesmo tempo, mas só obtemos o código de saída quando o primeiro comando termina.
log < "$errfile"
acima, é claro, direcionaria a mensagem de erro para stdin delog
(como você obteria com um cano). Para obtê-lo como um argumento de linha de comando, uselog "$(cat "$errfile")"
(um argumento) oulog $(cat "$errfile")
(com divisão de palavras,log
vê vários argumentos) oulog "$(< "$errfile")"
(não padrão, funciona pelo menos no Bash).Se for suficiente para seus propósitos saber o código de saída do primeiro elemento do pipe (ou qualquer elemento de qualquer pipe), você pode se valer da
bash
variávelPIPESTATUS
, que de acordo com abash
página do manual é: "Uma variável de array . .. contendo uma lista de valores de status de saída dos processos no pipeline de primeiro plano executado mais recentemente ...".Sei que, tecnicamente, você está pedindo algo um pouco diferente, mas considere se o uso dessa variável pode atender às suas necessidades de uma maneira que não previu originalmente.