Pregunta

Tengo Ubuntu Linux. Encontré que un comando me permite descargar temas de mensajes no leídos desde Gmail:

curl -u USERNAME:PASSWORD --silent "https://mail.google.com/mail/feed/atom" | tr -d '\n' | awk -F '<entry>' '{for (i=2; i<=NF; i++) {print $i}}' | sed -n "s/<title>\(.*\)<\/title.*name>\(.*\)<\/name>.*/\2 - \1/p"

... y luego otro comando que me permita enviar correo fácilmente (una vez que instalé el comando sendemail mediante apt-get):

sendEmail -f EMAIL@DOMAIN.COM -v -t PHONE@SMS.COM -u Gmail Notifier -m test -s MAILSERVER:PORT -xu EMAIL@DOMAIN.COM -xp PASSWORD

(Tenga en cuenta que cuando esté en producción probablemente intercambiaré -v arriba con -q.)

Entonces, si un comando descarga una línea de temas, ¿cómo puedo canalizar estos en el comando sendEmail?

Por ejemplo, intenté usar un carácter de canalización entre los dos, donde usé " $ 1 " después del parámetro -m, pero lo que sucedió fue que cuando no tenía correos electrónicos no leídos, todavía me enviaría al menos un mensaje vacío.

Si me ayudas con esto, usaré esta información para compartir en StackOverflow cómo crear un Notificador de Gmail para que puedas conectarte a los mensajes SMS en su teléfono.

¿Fue útil?

Solución

Creo que si mezclas viraptor & amp; Las respuestas de DigitalRoss te dan lo que quieres. Creé una prueba de muestra creando un archivo falso con la siguiente entrada:

Contenido del archivo:

foo

bar

baz

Luego ejecuté este comando:

% cat ~/tmp/baz | while read x; do if [[ $x != "" ]]; then echo "x: '$x'"; fi; done

Esto solo imprimirá líneas con entrada. No estoy familiarizado con enviar correo electrónico; ¿Necesita el cuerpo para estar en stdin o puedes pasarlo en el cmdline?

Otros consejos

Sabes que puedes hacerlo directamente en gmail utilizando un filtro y tu puerta de enlace de correo electrónico SMS, ¿no?

Pero volviendo a la pregunta ...

Puede obtener el control en un script de shell para la salida del comando con el siguiente patrón de diseño:

command1 | while read a b c restofline; do
    : execute commands here
    : command2
done

Leer coloca la primera palabra en a , la segunda en b y el resto de la línea en restofline . Si el bucle consta de un solo comando, el programa xargs probablemente solo hará lo que usted desea. Lea en particular sobre el parámetro -I que le permite colocar el argumento sustituido en cualquier parte del comando.

A veces el bucle se parece a ... | mientras lee x; do , que coloca la línea completa en x .

Prueba esta estructura:

while read line
do
    sendemailcommand ... -m $line ...
done < <(curlcommand)

Miraría el comando xargs , que proporciona todas las funciones que necesitas (hasta donde puedo decir).

http://unixhelp.ed.ac.uk/CGI/man -cgi? xargs

Tal vez algo como esto:

curl_command > some_file
if [[ `wc -l some_file` != "0 some_file" ]] ; then
  email_command < some_file
fi
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top