2012-01-11 75 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执行它;它可能适合你。