Pregunta

Tengo un script bash que ejecuta una consulta en postgres y la genera en csv.Quiero agregar a esa secuencia de comandos el uso de mailx para enviar por correo electrónico ese archivo .csv a un correo electrónico en particular.

El problema que tengo es que no envía el archivo por correo electrónico.Puedo recibir el correo electrónico para saber que mailx está configurado correctamente.Simplemente no puedo enviarlo por correo electrónico como archivo adjunto.También puede enviar el resultado por correo electrónico en el cuerpo del correo electrónico.

Así que aquí está el código.

    #!/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

Probé la parte mailx con:

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

y

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

Entonces, el problema que tengo es que muestra este error cuando ejecuto el archivo .sh.

    uuencode: fopen-ing /tmp/folder/file-01-11-2011.csv: Unknown system error
¿Fue útil?

Solución

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

Depende de usted, pero considere usar el formato ISO-8601, AAAA-MM-DD (%Y-%m-%d). Entre otras ventajas, se clasifica muy bien.

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

Esto no elimina las dos primeras líneas, solo elimina la segunda línea. Cambie '2d' a '1,2d' (pero consulte a continuación).

Tenga en cuenta que esto modifica el archivo en su lugar.

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

Si uuencode recibe solo un nombre de archivo, lee de la entrada estándar y pone el nombre en su salida. Su siguiente texto, "Probé la parte mailx con:" ..., indica que probablemente esté al tanto de esto, pero no nos ha mostrado el código que soluciona ese problema más que en fragmentos.

El mensaje de error que recibe:

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

no es lo que obtendría normalmente si el archivo no existe. No sé qué podría causar un "Error de sistema desconocido" como ese.

Pero aquí hay una alternativa que (a) es un poco más limpia en mi humilde opinión, y (b) no requiere uuencode para intentar leer el archivo:

#!/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

Otros consejos

Si el problema es con uuencode ... ¿por qué no puedes probar la opción mailx -a que también puede adjuntar los archivos al correo? Consulte este enlace para obtener más información.

Tuve el mismo problema.Un script bash que ejecuta la consulta, guarda el archivo csv y lo envía por correo.En mi caso me dio la uuencode: fopen-ing /tmp/folder/file-01-11-2011.csv: Unknown system error

Cuando ejecuté el script usando el shell ksh, funcionó perfectamente sin ningún problema.Como esto - ksh script.sh Éste es sólo otro indicador.En caso de que uuencode dé un error, intente ejecutarlo usando ksh;podría funcionar para ti.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top