2012-01-11 74 views
0

我有一個bash腳本在postgres中運行查詢,它輸出到csv。我想添加到該腳本來使用mailx將.csv文件發送到特定的電子郵件。Bash腳本使用mailx郵件附件

我遇到的問題是它不會通過電子郵件發送文件。我可以收到電子郵件,所以我知道mailx設置正確。我無法通過電子郵件將它作爲附件發送給我。它也可以通過電子郵件發送電子郵件中的輸出。

所以這裏是代碼。

#!/bin/bash 
    NOWDATE=`date +%m-%d-%Y` 
    PGPASSWORD=password psql -w -h host -p 5432 -d database -U user -o /tmp/folder/file-$NOWDATE.csv <<EOF 
    Query is here 

    # remove the first 2 lines of the report as they are headers 
    sed -i '2d' /tmp/folder/file-$NOWDATE.csv 

    uuencode /tmp/folder/file-$NOWDATE.csv | mailx -s "Accounts No Credit Card Report for '$NOWDATE'" [email protected] 

我曾嘗試與mailx的部分:

uuencode /tmp/folder/file-$NOWDATE.csv /tmp/folder/file-$NOWDATE.csv | mailx -s "Accounts No Credit Card Report for '$NOWDATE'" [email protected] 

uuencode /tmp/folder/file-$NOWDATE.csv file-$NOWDATE.csv | mailx -s "Accounts No Credit Card Report for '$NOWDATE'" [email protected] 

所以我得到的問題是,當我運行sh文件就吐出了這個錯誤。

uuencode: fopen-ing /tmp/folder/file-01-11-2011.csv: Unknown system error 
+0

路徑'/ tmp/folder/file- $ NOWDATE.csv'是否正確?在你有這個文件的地方做一個'pwd'並仔細檢查。當'/ path/to/file'不存在時發生此錯誤。 – 2012-01-11 22:33:39

+0

此外,'sed -i'2d'filename'刪除第二行,而不是**前兩個。爲了刪除前兩行,你需要執行'sed -i'1,2d'filename' – 2012-01-11 22:37:21

+0

Jaypal。我同意評論是錯誤的我發現我只需要刪除第二行...我先刪除了第一個和第二個。大聲笑...好吧,我會檢查出來。 – DoCnTex 2012-01-11 22:39:08

回答

1
NOWDATE=`date +%m-%d-%Y` 

這是給你的,但考慮使用ISO-8601格式,YYYY-MM-DD(%Y-%m-%d)。除其他優點外,它分類很好。

# remove the first 2 lines of the report as they are headers 
sed -i '2d' /tmp/folder/file-$NOWDATE.csv 

這並不刪除前兩行,它只是刪除第二行。將'2d'更改爲'1,2d'(但請參閱下文)。

請注意,這會修改文件。

uuencode /tmp/folder/file-$NOWDATE.csv | mailx [...] 

如果uuencode只給出一個文件名,它從標準輸入讀取,並把名字到它的輸出。您的以下文字「我試過mailx部分:」,表示您可能已經意識到了這一點 - 但您沒有向我們展示除代碼段以外的其他問題修復此問題的代碼。

錯誤消息你得到:

uuencode: fopen-ing /tmp/folder/file-01-11-2011.csv: Unknown system error 

什麼,如果該文件不存在,你通常得到的。我不知道是什麼會導致這樣的「未知系統錯誤」。

但這裏有一個替代方案,(a)是位清潔恕我直言,和(b)不需要uuencode嘗試讀取文件:

#!/bin/bash 

NOWDATE=`date +%m-%d-%Y` # but %Y-%d-%m is better 
DIR=/tmp/folder 
FILE=file-$NOWDATE.csv 
[email protected] 

PGPASSWORD=password psql -w -h host -p 5432 -d database -U user -o $DIR/$FILE <<EOF 
... Query is here 
EOF 

tail -n +3 $DIR/$FILE | uuencode $FILE | \ 
    mailx -s "Accounts No Credit Card Report for '$NOWDATE'" $RECIPIENT 
+0

謝謝你Keith,你的格式幫助我簡化了過程。非常感謝! – DoCnTex 2012-01-13 17:03:38

2

如果問題是UUENCODE ...爲什麼不能嘗試mailx - 一個可以將文件附加到郵件的選項。 請查看link瞭解更多信息。

+0

謝謝你,我確實使用了-a for mailx,它工作...非常感謝Raghuram – DoCnTex 2012-01-13 17:03:04

0

我有同樣的問題。執行查詢的bash腳本,保存csv文件並將其發送。在我的情況下它給了uuencode: fopen-ing /tmp/folder/file-01-11-2011.csv: Unknown system error

當我使用ksh shell執行腳本時,它工作得很好,沒有任何問題。像這樣 - ksh script.sh這只是另一個指針。如果uuencode給出錯誤,則嘗試使用ksh執行它;它可能適合你。