2010-09-23 51 views
0

我有一個Perl腳本,可以在屏幕上輸出多行輸出。我需要捕獲這些行,並將它們傳送到一個電子郵件(/ bin/mail)或一個文本文件中,以便在另一個操作中通過/ bin郵件發送。實際上,我已經找到了簡單(愚蠢)的方法,我使用bash包裝來做郵件。看起來像,如何將Perl的多行輸出發送到/ bin/mail?

#!/usr/bin/bash 
source /nethome/zog/.bash_profile 
cd /nethome/zog/bin/perl 
/nethome/zog/bin/perl/find_free_space.pl > text.file 
/bin/mail -s [email protected] [email protected] < text.file 

我想要使用Net :: SMTP做smtp位。至少可以說,上述不雅。

我看到了這樣的事情:在計算器

open(MAIL, "| /bin/mail -s FreePorts me\@geemail.com") || 
    die "mail failed: $!\n"; print MAIL "This is how it goes." 

,但未能在標準輸出重定向到郵件。我使用的是:

$complete_output .= "\n"; "|/bin/mail -s FreePorts zog\@geeemail.com" || die "mail failed: $!\n"; 

我不知道,如果你都需要看到的Perl腳本,以幫助,但it is on pastebin。請告訴我。

+0

你來得很近,請參閱http://stackoverflow.com/questions/655719/how-do-i-unalias-from-perls-stdout – msw 2010-09-23 03:34:33

回答

1

STDOUT不在這裏玩。你忘了告訴我們什麼嗎?當您打印到MAIL文件句柄時發生了什麼?這個輸出是否成爲消息?將多行發送到MAIL文件句柄時會發生什麼?

你的代碼是:

"|/bin/mail -s FreePorts zog\@geeemail.com" || die "mail failed: $!\n"; 

,什麼也不做。這是一個字符串,這也是一個真正的價值。交替從來沒有對模具分支。當你在問題中使用第一個代碼時發生了什麼?寫一個小示例腳本,看看你是否可以發送郵件並進行測試,直到找出結果。例如,這是一個測試您的問題的完整腳本:

#!perl 
use strict; 
use warnings; 
open my $mail, '| /bin/mail -s FreePorts [email protected]'; 
print $mail "This is a test message from $$ at " . localtime() . "\n"; 
close $mail or die "The pipe failed!\n $?"; 

當您運行該操作時會發生什麼?當您從命令行嘗試相同的命令時會發生什麼?

爲什麼不使用Perl模塊(如Email :: *模塊之一)而不是依靠外部命令?有很多關於進程間通信的知識,我認爲你是在這方面的曲線。模塊爲您提供所有的細節,具有更好的界面,並且更加靈活。

+0

} #print「\ n」; $ complete_output。=「\ n」; 「|/bin/mail -s FreePorts zog \ @ gmeeil.com」||死「郵件失敗:$!\ n」; } – user455351 2010-09-23 18:31:12

+0

我有我認爲是一個全局標量命名,「$ complete_output」在這個腳本收集所有的輸出行。這工作。現在我需要能夠將收集到的數據發送到/ bin/mail或/ usr/sbin/sendmail – user455351 2010-09-23 18:34:16

+0

用其他詳細信息編輯您的問題。向我們展示一個完整的示例腳本,演示您遇到的問題。 – 2010-09-23 18:35:26

相關問題