باش النصي باستخدام ميلكس إلى مرفق البريد
-
27-10-2019 - |
سؤال
لدي برنامج نصي باش الذي يقوم بتشغيل استعلام في بوستغريس ، فإنه يخرج إلى كسف.أريد أن أضيف إلى هذا البرنامج النصي لاستخدام ميلكس إلى البريد الإلكتروني ذلك .ملف كسف إلى بريد إلكتروني معين.
المشكلة أواجه هو أنه لن البريد الإلكتروني الملف.يمكنني الحصول على البريد الإلكتروني حتى أعرف ميلكس هو الإعداد بشكل صحيح.أنا فقط لا يمكن الحصول عليه إلى البريد الإلكتروني كمرفق.يمكنه أيضا إرسال الإخراج بالبريد الإلكتروني في نص البريد الإلكتروني.
حتى هنا هو رمز.
#!/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
لقد حاولت الجزء ميلكس مع:
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
وبالتالي فإن المشكلة أحصل هو يبصق هذا الخطأ عند تشغيل ملف ش.
uuencode: fopen-ing /tmp/folder/file-01-11-2011.csv: Unknown system error
المحلول
NOWDATE=`date +%m-%d-%Y`
والامر متروك لكم ، ولكن النظر في استخدام تنسيق إسو-8601 ، يي-مم-د (%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
يتم إعطاء اسم ملف واحد فقط ، يقرأ من الإدخال القياسي ويضع الاسم في مخرجاته.النص التالي،" لقد حاولت جزء ميلكس مع:"...، يشير إلى أنك ربما تكون على دراية بهذا-لكنك لم تعرض لنا الكود الذي يعمل على إصلاح هذه المشكلة بخلاف المقتطفات.
رسالة الخطأ التي تتلقاها:
uuencode: fopen-ing /tmp/folder/file-01-11-2011.csv: Unknown system error
أليس كذلك ما ستحصل عليه عادة إذا لم يكن الملف موجودا.لا أعرف ما الذي قد يتسبب في "خطأ غير معروف في النظام" من هذا القبيل.
ولكن هنا بديل أن (أ) هو إمهو أنظف قليلا ، و (ب) لا يتطلب 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
نصائح أخرى
إذا كانت المشكلة تتعلق بـ uuencode ... فلماذا لا يمكنك تجربة خيار mailx -a الذي يمكنه أيضًا إرفاق الملفات بالبريد. تحقق من هذا الرابط لمزيد من المعلومات.
كان لدي نفس المشكلة.برنامج نصي باش تنفيذ الاستعلام ، وتوفير ملف كسف وإرسالها بالبريد.في حالتي أنه أعطى uuencode: fopen-ing /tmp/folder/file-01-11-2011.csv: Unknown system error
عندما نفذت البرنامج النصي باستخدام قذيفة شلن ، عملت بشكل جيد تماما دون أي مشاكل.مثل هذا - ksh script.sh
هذا مجرد مؤشر آخر.في حالة وين كود يعطي خطأ ، ثم حاول تنفيذه باستخدام كش;قد عمل لك.