Bagaimana cara mengirim output ke layar dan email?

9

Saya menggunakan yang berikut ini untuk mengirim email di akhir skrip.

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

Namun, saya juga ingin menggema pesan yang sama ke layar. Bagaimana saya melakukannya dalam pernyataan yang sama?

sammy
sumber

Jawaban:

19

Cara termudah mungkin untuk teepesan ke stderr dan stdout:

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

teeduplikat inputnya ke beberapa tujuan, termasuk stdout. Secara default, stderr dan stdout pergi ke layar; Anda mengarahkan ulang stdout ke Mail, hanya menyisakan stderr pergi ke layar.

Jika Anda membutuhkannya di stdout karena suatu alasan, Anda dapat mengarahkannya kembali menggunakan subkulit (atau beberapa cara lain):

(
    echo "Script finished on date" | tee /dev/stderr \
        | /usr/bin/Mail -s "Script complete" "[email protected]"
) 2>&1
derobert
sumber
3
sebagai alternatif, tee ke file dan kemudian mengirimkan file ... sangat berguna jika outputnya besar dan Anda ingin mengirimnya, misalnya, sebagai lampiran MIME gzip yang di-encode. atau hanya mengarahkan semua output ke file (misalnya dengan exec &> $LOGFILE) dan kemudian mengembalikan stdout, cat file ke stdout dan kirimkan.
cas
Craig terima kasih. Karena teks saya dalam kasus ini sangat kecil, saya akan pergi dengan tanggapan dari derobert.
sammy
Hmm .. ini berhasil tetapi saya menyadari bahwa saya perlu menambahkan lebih banyak ke deskripsi masalah saya. Saya menggunakan solusi ini sebagai baris terakhir dari skrip saya. Saya menggunakan perintah "nohup" pada skrip saya untuk mengumpulkan semua output skrip saya sebagai "nohup.out" dan yang saya lihat hanyalah satu baris ini "Skrip selesai pada xxxxx". Sebelum menggunakan solusi ini, saya mendapatkan semua hasil skrip baik-baik saja. Apakah ada cara bagaimana saya dapat menambahkan output dari baris terakhir ini alih-alih menghapus semuanya?
sammy
1
Menggunakan "tee-a" memecahkan masalah.
sammy