2012-01-11 11 views
0

私はpostgresでクエリを実行するbashスクリプトを持っており、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の部分を試してみました。だから私は得る問題は、私は.SHファイルを実行すると、それは、このエラーを吐くある

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] 

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

パス '/ tmp/folder/file- $ NOWDATE.csv'は正しいですか?あなたがファイルを持っているところで 'pwd'を実行し、ダブルチェックします。このエラーは、 '/ path/to/file'が存在しない場合に発生します。 –

+0

また、 'sed -i '2d' filename'は2行目と**最初の2行を削除します。最初の2行を削除するには 'sed -i 'を実行する必要があります。1,2d' filename' –

+0

Jaypal。私はコメントが間違っていたことに同意しました。私は2行目を削除する必要があることがわかりました。最初に1行目と2行目を削除しました。 LOL ...さて、私はそれをチェックします。 – DoCnTex

答えて

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 

これは、最初の2行を削除しないで、2行目を削除するだけです。 '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 

は、ファイルが存在しない場合は、正常に取得したい何ではありません。私は "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

あなたはキースです、あなたの書式はプロセスを簡素化するのに役立ちました。大変感謝しています! – DoCnTex

2

問題がuuencodeをしている場合...なぜあなたはメールにファイルを添付することもできるmailx -aオプションを試してみませんか? 詳細はlinkをご確認ください。

+0

私はmailxに-aを使っていましたが、うまくいきました。 – DoCnTex

0

私は同じ問題がありました。クエリを実行し、csvファイルを保存して郵送するbashスクリプト。私の場合、それはそれを与えましたuuencode: fopen-ing /tmp/folder/file-01-11-2011.csv: Unknown system error

私はkshシェルを使ってスクリプトを実行したとき、問題なく完全に正常に動作しました。このように - ksh script.shこれは単なる別のポインタです。 uuencodeでエラーが発生した場合は、kshを使って実行してみてください。それはあなたのために働くかもしれません。

関連する問題