Domanda

Ho uno script bash che esegue una query in postgres, viene restituito a csv.Voglio aggiungere a quello script per utilizzare mailx per inviare tramite e-mail quel file .csv a una particolare e-mail.

Il problema che sto riscontrando è che non invierà il file tramite posta elettronica.Posso ricevere l'email così so che mailx è impostato correttamente.Non riesco a convincerlo a inviarlo tramite posta elettronica come allegato.Può anche inviare tramite e-mail l'output nel corpo dell'e-mail.

Quindi ecco il codice.

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

Ho provato 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

e

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

Quindi il problema che ho è che sputa questo errore quando eseguo il file .sh.

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

Soluzione

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

Dipende da te, ma valuta l'utilizzo del formato ISO-8601, AAAA-MM-GG (%Y-%m-%d). Tra gli altri vantaggi, si ordina bene.

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

Questo non rimuove le prime due righe, rimuove solo la seconda riga. Cambia '2d' in '1,2d' (ma vedi sotto).

Nota che questo modifica il file in posizione.

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

Se a uuencode viene assegnato un solo nome di file, legge dallo standard input e inserisce il nome nel suo output. Il tuo testo seguente, "Ho provato la parte mailx con:" ..., indica che probabilmente ne sei a conoscenza, ma non ci hai mostrato il codice che risolve il problema oltre che nei frammenti.

Il messaggio di errore che stai ricevendo:

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

non è quello che otterresti normalmente se il file non esiste. Non so cosa causerebbe un "Errore di sistema sconosciuto" come quello.

Ma ecco un'alternativa che (a) è un po 'più pulita IMHO e (b) non richiede uuencode per tentare di leggere il file:

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

Altri suggerimenti

Se il problema è con uuencode ... perché non puoi provare l'opzione mailx -a che può anche allegare i file alla posta. Controlla questo link per maggiori informazioni.

Ho avuto lo stesso problema.Uno script bash che esegue la query, salva il file csv e lo invia per posta.Nel mio caso ha dato il uuencode: fopen-ing /tmp/folder/file-01-11-2011.csv: Unknown system error

Quando ho eseguito lo script utilizzando la shell ksh, ha funzionato perfettamente senza problemi.In questo modo - ksh script.sh Questo è solo un altro puntatore.Nel caso in cui uuencode dia un errore, prova a eseguirlo usando ksh;potrebbe funzionare per te.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top