0

postgresでクエリを実行するbashスクリプトがあり、csvに出力します。そのスクリプトに追加して、mailxを使用してその.csvファイルを特定の電子メールに電子メールで送信したいと思います。

私が抱えている問題は、ファイルが電子メールで送信されないことです。メールを受け取ることができるので、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'" mail@gmail.com

私はmailxの部分を次のように試しました:

    uuencode /tmp/folder/file-$NOWDATE.csv /tmp/folder/file-$NOWDATE.csv | mailx -s "Accounts No Credit Card Report for '$NOWDATE'" mail@gmail.com

    uuencode /tmp/folder/file-$NOWDATE.csv file-$NOWDATE.csv | mailx -s "Accounts No Credit Card Report for '$NOWDATE'" mail@gmail.com

したがって、私が得る問題は、.shファイルを実行するとこのエラーが吐き出されることです。

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

3 に答える 3

2

問題がuuencodeにある場合...なぜmailxを試すことができないのですか?ファイルをメールに添付することもできるオプションです。詳細については、このリンクを確認してください。

于 2012-01-12T05:22:39.730 に答える
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 [...]

与えられたファイル名が1つだけの場合uuencode、標準入力から読み取り、その名前を出力に入れます。次のテキスト「mailxの部分を次のように試しました:」...は、おそらくこれを認識していることを示していますが、スニペット以外でこの問題を修正するコードを示していません。

表示されるエラーメッセージ:

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

ファイルが存在しない場合に通常得られるものではありませんそのような「不明なシステムエラー」の原因はわかりません。

ただし、(a)少しクリーンなIMHOであり、(b)uuencodeファイルの読み取りを試みる必要がないという代替案があります。

#!/bin/bash

NOWDATE=`date +%m-%d-%Y` # but %Y-%d-%m is better
DIR=/tmp/folder
FILE=file-$NOWDATE.csv
RECIPIENT=user@example.com

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
于 2012-01-12T04:57:50.640 に答える
0

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

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

于 2013-08-28T09:32:50.247 に答える