Hem ekrana hem de postaya nasıl çıktı gönderilir?


9

Bir betiğin sonunda bir e-posta göndermek için aşağıdakileri kullanıyorum.

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

Ancak aynı mesajı ekrana da yansıtmak istiyorum. Bunu aynı ifadede nasıl yapabilirim?

Yanıtlar:


19

En kolay yol muhtemelen teestderr'a ve stdout'a mesajdır:

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

teegirdisini stdout dahil olmak üzere birden çok hedefe çoğaltır. Varsayılan olarak, hem stderr hem de stdout ekrana gider; stdout'u yeniden yönlendiriyorsunuz Mail, sadece stderr ekrana gidiyor.

Herhangi bir nedenden dolayı stdout'ta ihtiyacınız varsa, bir alt kabuk (veya başka yollarla) kullanarak yeniden yönlendirebilirsiniz:

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

3
alternatif olarak, bir dosyaya yazın ve dosyayı postalayın ... çıktı çok büyükse ve örneğin base64 kodlu gzip edilmiş MIME eki olarak göndermek istiyorsanız çok yararlıdır. veya tüm çıktıları bir dosyaya (örneğin ile exec &> $LOGFILE) yönlendirin ve sonra stdout'u geri yükleyin, stdout'a dosyalayın ve postalayın.
cas

Teşekkürler Craig. Bu durumda metnim çok küçük olduğundan, derobert'in yanıtıyla gideceğim.
sammy

Hmm .. Bu işe yaradı ancak benim sorun açıklamasına daha fazla eklemek gerektiğini fark ettim. Bu çözümü senaryomun son satırı olarak kullandım. Komut dizimin tüm çıktısını "nohup.out" olarak toplamak için komut dosyamda "nohup" komutunu kullandım ve tüm gördüğüm bu komut satırı "xxxxx'de bitmiş". Bu çözümü kullanmadan önce, tüm komut dosyası çıktısını aldım. Hepsini silmek yerine bu son satırın çıktısını nasıl ekleyebileceğim bir yolu var mı?
sammy

1
"Tee -a" kullanmak sorunu çözdü.
sammy
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.