Frage

Ich habe Ubuntu Linux. Ich fand einen Befehl lässt mich ungelesene Nachricht Themen von Google Mail heruntergeladen werden:

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"

... und dann ein anderer Befehl mir Mail leicht senden lassen (wenn ich der Sendemail-Befehl über apt-get installiert ist):

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

(Beachten Sie, wenn in der Produktion werde ich wahrscheinlich mit -q tauschen -v oben.)

Also, wenn ein Befehl lädt eine Zeile Themen, wie kann ich Rohr diese in den sendemail Befehl?

Zum Beispiel habe ich versucht, ein Pipe-Zeichen zwischen den beiden mit, wo ich „$ 1“ nach dem Parameter -m verwendet, aber was passiert war, dass, wenn ich keine ungelesenen E-Mails hätte es mindestens eine leere Nachricht senden Sie mir noch.

Wenn Sie mir dabei helfen, werde ich diese Informationen benutzen, auf Stackoverflow zu teilen, wie ein Google Mail Notifier zu bauen, dass man SMS-Nachrichten auf ihrem Handy anschließen können.

War es hilfreich?

Lösung

Ich denke, wenn man viraptor & DigitalRoss' Antworten, die Sie mischen, was Sie wollen. Ich habe einen Probe-Test durch eine gefälschte Datei mit folgenden Eingabe zu erstellen:

Datei-Inhalt:

foo

bar

baz

Dann lief ich diesen Befehl ein:

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

Dies wird nur Druckzeilen mit Eingabe aus. Ich bin nicht vertraut mit sendemail; ist es, den Körper muß auf stdin sein oder können Sie es auf dem cmdline passieren?

Andere Tipps

Sie wissen Sie, dass direkt in gmail unter Verwendung eines Filters und SMS-E-Mail-Gateway tun, nicht wahr?

Aber zurück zur Frage ...

Sie können die Kontrolle in einem Shell-Skript für Befehlsausgabe mit dem folgende Design-Muster erhalten:

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

Lesen Sie legt das erste Wort in a, die zweite in b, und den Rest der Linie in restofline. Wenn die Schleife besteht aus nur einem einzigen Befehl, wird das xargs Programm wahrscheinlich nur das tun, was Sie wollen. Lesen Sie insbesondere über die -I Parameter, die Sie das substituierte Argument überall in dem Befehl platzieren können.

Manchmal sieht die Schleife wie ... | while read x; do, die die gesamte Linie in x setzt.

Versuchen Sie, diese Struktur:

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

würde ich am xargs Befehl suchen, die die Eigenschaften alles, was Sie (soweit ich das beurteilen kann) müssen zur Verfügung stellt.

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

Vielleicht so etwas wie folgt aus:

curl_command > some_file
if [[ `wc -l some_file` != "0 some_file" ]] ; then
  email_command < some_file
fi
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top