2012-08-09 1 views
7
echo "Total items: `echo $QUERY1 | awk '{print $1}'`" 
echo "Total Error: `echo $QUERY1 | awk '{print $2}'`" 
echo "Percentage: $QUERY2" 

Come posso inviare queste tre cose in una sola e-mail utilizzando mail command. Così il corpo del messaggio dovrebbe essere così di seguito ogni volta che ricevo ogni email, in ogni riga ci dovrebbe essere una eco statement-Tubo l'uscita da tre dichiarazioni eco per posta

Total items:- Some Number 
Total Error:- Some Number 
Percentage:- Some Number 

Sono in esecuzione SunOS

bash-3.00$ uname -a 
SunOS lvsaishdc3in0001 5.10 Generic_142901-02 i86pc i386 i86pc 
+0

Non si può eseguire il pipe in un file tmp e basta inserirlo? –

+0

tutte queste istruzioni echo ci sono nel mio script di shell e da quello script di shell ho solo bisogno di passare queste tre istruzioni di eco in una singola email. – AKIWEB

+0

possibile duplicato di [Invia una e-mail a un gruppo di posta elettronica usando lo script di shell] (http://stackoverflow.com/questions/11875036/send-an-email-to-a-email-group-using-shell-script) – tripleee

risposta

15

vostro requisito non è del tutto chiaro, ma provare questo

{ 
    echo "Total items: `echo $QUERY1 | awk '{print $1}'`" 
    echo "Total Error: `echo $QUERY1 | awk '{print $2}'`" 
    echo "Percentage: $QUERY2" 
} | mail -s "subject" [email protected],[email protected] 

la coppia { .. } crea un gruppo processo, e tutti std-output viene reindirizzato al 1 | (pipe), che si connette allo std-in del tuo programma di posta.

Potrebbe essere necessario utilizzare mailx, -s specifica l'oggetto, che vedo dall'altra domanda su questo argomento che sembra capire.

Anche il sendmail deve essere in esecuzione e configurato correttamente per l'invio di qualsiasi messaggio dalla macchina che si esegue questo script.

IHTH


Edit: 2015-11-07

appena ricevuto una stella 'bella risposta' per questo, e su sulla revisione, sono sorpreso che non ho commentare l'uso eccessivo dei processi. Per questo caso, questo può essere ridotta ad una chiamata awk, cioè

awk -v q1="$QUERY1" -v q2="$QUERY2" \ 
'END { 
    split(q1,q1arr) 
    print "Total items: " q1arr[1] \ 
      "Total Error: " q1arr[2] \ 
      "Percentage: " q2 
}' /dev/null \ 
| mail -s "subject" [email protected],[email protected] 

O per la folla one-liner ;-), che è

awk -v q1="$QUERY1" -v q2="$QUERY2" 'END {split(q1,q1arr);print "Total items: " q1arr[1] "\nTotal Error: " q1arr[2] "\nPercentage: " q2 }' /dev/null | mail -s "subject" [email protected],[email protected] 

Il { .. } non sono necessari in questo caso, in quanto vi è una sola procedura di connessione alla pipe.

Per un caso come un rapporto di riepilogo inviato una volta al giorno, il codice originale è completamente utilizzabile (ma non ottimale). Tuttavia, la codifica non ottimale porta a cattive abitudini. Chiamare 5 processi quando uno sarà sufficiente in un ciclo che viene eseguito migliaia di volte in un giorno, consumerà risorse di elaborazione inutilmente.

Infine, come l'o.p. non ha incluso alcun dato di esempio, il codice è solo leggermente testato.

1

Basta creare una funzione in bash e | (pipe) a sendmail.

  #!/bin/bash 

      echo_statement(){ 

      echo "Total items: `echo $QUERY1 | awk '{print $1}'`" 
      echo "Total Error: `echo $QUERY1 | awk '{print $2}'`" 
      echo "Percentage: $QUERY2" 

      } 
      echo_statement | mail -s "subject" [email protected] 
+0

anche questo funziona. Buona fortuna a tutti. – shellter