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>&-
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 ?
Tags bash ksh solaris linux shell-script