Question

J'ai Ubuntu Linux. J'ai trouvé une commande qui me permet de télécharger les sujets de message non lus de 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"

... et ensuite une autre commande pour me laisser envoyer facilement des mails (une fois que j'ai installé la commande sendemail via 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

(Notez qu'en production, j'échangerai probablement -v ci-dessus avec -q.)

Ainsi, si une commande télécharge des sujets d'une ligne, comment puis-je les canaliser vers la commande sendEmail?

Par exemple, j’ai essayé d’utiliser un caractère de transition entre les deux, où j’ai utilisé " $ 1 " après le paramètre -m, mais ce qui s’est passé, c’est que, quand je n’ai pas de courrier électronique non lu, il m’envoie au moins un message vide.

Si vous m'aidez, je vais utiliser ces informations pour expliquer à StackOverflow comment créer un notificateur Gmail permettant de connecter des messages SMS sur son téléphone.

Était-ce utile?

La solution

Je pense que si vous mélangez viraptor & amp; Les réponses de DigitalRoss vous donnent ce que vous voulez. J'ai créé un exemple de test en créant un faux fichier avec l'entrée suivante:

Contenu du fichier:

foo

bar

baz

Ensuite, j'ai lancé cette commande:

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

Ceci n’imprimera que les lignes avec entrée. Je ne connais pas sendEmail. a-t-il besoin que le corps soit en stdin ou pouvez-vous le transmettre à la cmdline?

Autres conseils

Vous savez que vous pouvez le faire directement dans Gmail en utilisant un filtre et votre passerelle de messagerie SMS, n'est-ce pas?

Mais revenons à la question ...

Vous pouvez obtenir le contrôle d'un script shell pour la sortie de commande avec le modèle de conception suivant:

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

Lire place le premier mot dans a , le second dans b et le reste de la ligne dans restofline . Si la boucle consiste en une seule commande, le programme xargs fera probablement ce que vous voulez. Lisez en particulier le paramètre -I qui vous permet de placer l’argument substitué n’importe où dans la commande.

Parfois, la boucle ressemble à ... | en lisant x; do , qui place la ligne entière dans x .

Essayez cette structure:

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

Je regarderais la commande xargs , qui fournit toutes les fonctionnalités dont vous avez besoin (pour autant que je sache).

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

Peut-être quelque chose comme ceci:

curl_command > some_file
if [[ `wc -l some_file` != "0 some_file" ]] ; then
  email_command < some_file
fi
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top