Як надіслати вихід і на екран, і на пошту?


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дублює своє введення в декілька напрямків, включаючи stdout. За замовчуванням і stderr, і stdout виходять на екран; ви перенаправляєте stdout на Mail, залишаючи лише більш жорсткий на екран.

Якщо він потрібен у stdout з якихось причин, ви можете перенаправити його назад, використовуючи нижню частину оболонки (або кілька інших способів):

(
    echo "Script finished on date" | tee /dev/stderr \
        | /usr/bin/Mail -s "Script complete" "myaccount@myserver.com"
) 2>&1

3
Альтернативно, підберіть файл, а потім надішліть файл поштою ... дуже корисно, якщо вихід величезний, і ви хочете надіслати його, наприклад, у вигляді закодованого GIMAP-вкладеного файлу MIME, кодованого base64. або просто перенаправити весь вихід у файл (наприклад, з exec &> $LOGFILE), а потім відновити stdout, передати кот на файл stdout та надіслати його поштою.
cas

Дякую, Крейг. Оскільки мій текст у цьому випадку дуже малий, я піду із відповіддю від дероберта.
Семмі

Хм .. це все спрацювало, але я зрозумів, що мені потрібно додати більше до опису проблеми. Я використав це рішення як останній рядок свого сценарію. Я використовував команду "nohup" на своєму скрипті, щоб зібрати всі результати мого сценарію як "nohup.out", і все, що я бачу, - це лише один рядок "Сценарій закінчений на ххххх". До використання цього рішення я отримав все виведення сценарію добре. Чи є спосіб, як я можу додати висновок цього останнього рядка, а не стерти все це?
Семмі

1
Використання "tee -a" вирішило проблему.
Семмі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.