Как отправить вывод на экран и на почту?

9

Я использую следующее, чтобы отправить электронное письмо в конце сценария.

echo "Script finished on `date`" | /usr/bin/Mail -s "Script complete" "myaccount@myserver.com".

Однако я хочу вывести на экран то же сообщение. Как мне сделать это в том же заявлении?

Сэмми
источник

Ответы:

19

Самый простой способ, вероятно, заключается в teeтом, чтобы послать как stderr, так и stdout:

echo "Script finished on date" | tee /dev/stderr \
    | /usr/bin/Mail -s "Script complete" "myaccount@myserver.com"

teeдублирует входные данные для нескольких адресатов, включая стандартный вывод. По умолчанию и stderr, и stdout выходят на экран; вы перенаправляете стандартный вывод Mail, оставляя только стандартный вывод на экран.

Если по какой-то причине он вам нужен в stdout, вы можете перенаправить его обратно с помощью подоболочки (или несколькими другими способами):

(
    echo "Script finished on date" | tee /dev/stderr \
        | /usr/bin/Mail -s "Script complete" "myaccount@myserver.com"
) 2>&1
derobert
источник
3
в качестве альтернативы, вы можете перейти к файлу, а затем отправить его по почте ... очень полезно, если вывод огромен, и вы хотите отправить его, например, в виде сжатого MIME-вложения в формате base64. или просто перенаправьте весь вывод в файл (например, с помощью exec &> $LOGFILE), а затем восстановите стандартный вывод, переместите файл в стандартный вывод и отправьте его по почте.
Cas
Спасибо, Крейг. Поскольку мой текст в этом случае очень маленький, я пойду с ответом от Дероберт.
Сэмми
Хм ... это сработало, но я понял, что мне нужно добавить больше к моему описанию проблемы. Я использовал это решение в качестве последней строки моего скрипта. Я использовал команду «nohup» в моем скрипте, чтобы собрать все выходные данные моего скрипта как «nohup.out», и все, что я вижу, это всего лишь одна строка «Сценарий завершен в xxxxx». До использования этого решения, я получил все выходные данные скрипта в порядке. Есть ли способ, как я могу добавить вывод этой последней строки вместо того, чтобы стереть все это?
Сэмми
1
Использование "ти-а" решило проблему.
Сэмми