Como enviar saída para tela e correio?

9

Eu uso o seguinte para enviar um e-mail no final de um script.

echo "Script finished on 'date'" | /usr/bin/Mail -s "Script complete" "[email protected]".

No entanto, quero repetir a mesma mensagem na tela também. Como faço isso na mesma declaração?

    
por sammy 19.09.2012 / 23:25

1 resposta

17

A maneira mais fácil é provavelmente tee da mensagem para stderr, bem como stdout:

echo "Script finished on date" | tee /dev/stderr \
    | /usr/bin/Mail -s "Script complete" "[email protected]"

tee duplica sua entrada para vários destinos, incluindo stdout. Por padrão, stderr e stdout vão para a tela; você está redirecionando o stdout para Mail , deixando apenas o stderr indo para a tela.

Se você precisar de stdout por algum motivo, você pode redirecioná-lo usando um subshell (ou várias outras maneiras):

(
    echo "Script finished on date" | tee /dev/stderr \
        | /usr/bin/Mail -s "Script complete" "[email protected]"
) 2>&1
    
por 19.09.2012 / 23:43