returncode do comando em um pipline [duplicado]

4

O script a seguir é executado no Solaris usando / bin / ksh e no Linux usando / bin / sh

cmd | tee -a  cmd.log | tail
exit $?

A saída de cmd é salva em um arquivo cmd.log e as últimas linhas são exibidas em stdout .

A finalidade de exit $? era sair do script com o código de retorno cmd . Claro que isso

não funciona porque $? contém o código de retorno do último comando no pipeline, que é

tail .

Solução alternativa (omitirei todas as atividades de limpeza):

{ cmd;  echo $? >  error.file; } | tee -a  cmd.log | tail
exit 'cat error.file'

Mas existe outra maneira de obter o código de retorno cmd e evitar a criação de um arquivo como error.file ?

    
por miracle173 16.10.2013 / 15:20

1 resposta

1

Tente isto:

(cmd; echo $? 1>&2) | tee -a  cmd.log | tail

Ou, se você quiser redirecionar o STDERR para o tee:

exec 3>&1; (cmd 2>&1; echo $? >&3 3>&-)| tee -a  cmd.log; exec 3>&-
    
por 16.10.2013 / 15:51