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

¿Cómo puedo enviar estas tres cosas en un solo correo electrónico usando mail command. Por lo que el cuerpo del correo debe ser como esto más adelante cada vez que tengo cualquier correo electrónico, en cada línea debe haber una declaración-ecoPipe la salida de tres declaraciones de eco al correo

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

Me postulo SunOS

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

¿No puedes conectarlo a un archivo tmp y simplemente canalizarlo? –

+0

todas estas declaraciones de eco están ahí en mi script de shell y solo necesito pasar estas tres instrucciones de eco en un único correo electrónico. – AKIWEB

+0

posible duplicado de [Enviar un correo electrónico a un grupo de correo electrónico mediante el script de shell] (http://stackoverflow.com/questions/11875036/send-an-email-to-a-email-group-using-shell-script) – tripleee

Respuesta

15

Su requisito no está del todo claro, pero probar este

{ 
    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 pareja { .. } crea un grupo de procesos, y todo std-salida se redirige al 1 | (tubería), que se conecta a la entrada estándar de su programa de correo.

Es posible que necesite utilizar mailx, -s especifica el tema, que veo de su otra pregunta sobre este tema que parece entender.

También sendmail deberá ejecutarse y configurarse correctamente para que se entregue cualquier correo desde la máquina en la que ejecuta este script.

IHTH


edición: 2015-11-07

acaba de recibir una estrella 'agradable respuesta' para esto, y en el examen, me sorprende que no lo hice comentar sobre el uso excesivo de procesos. Para este caso, esto se puede reducir a una llamada a awk, es decir,

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 para el público de una sola línea ;-), que es

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] 

El { .. } no son necesarios en este caso, ya que solo hay un proceso de conexión a la tubería.

Para un caso como un informe de resumen que se envía una vez al día, el código original es completamente utilizable (pero no óptimo). Sin embargo, la codificación no óptima conduce a malos hábitos. Llamar a 5 procesos cuando uno será suficiente en un bucle que se ejecuta 1000 veces en un día, consumirá recursos informáticos innecesariamente.

Finalmente, como el o.p. no incluyó ningún dato de muestra; el código solo se probó ligeramente.

1

Solo crea una función en bash y | (pipa) 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

eso también funciona Buena suerte a todos. – shellter

Cuestiones relacionadas