Domanda

Ho Ubuntu Linux. Ho trovato un comando che mi consentirà di scaricare gli argomenti dei messaggi non letti da 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"

... e poi un altro comando per farmi inviare facilmente la posta (una volta installato il comando sendemail tramite 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

(Nota che durante la produzione probabilmente cambierò -v sopra con -q.)

Quindi, se un comando scarica oggetti di una riga, come posso inserirli nel comando sendEmail?

Ad esempio, ho provato a usare un carattere pipe tra i due, dove ho usato " $ 1 " dopo il parametro -m, ma quello che è successo è che quando non avevo e-mail non lette mi avrebbe comunque inviato almeno un messaggio vuoto.

Se mi aiuti in questo, userò queste informazioni per condividere su StackOverflow come creare un Gmail Notifier che si può collegare ai messaggi SMS sul proprio telefono.

È stato utile?

Soluzione

Penso che se mescoli viraptor & amp; DigitalRoss 'risponde che ottieni quello che vuoi. Ho creato un test di esempio creando un file falso con il seguente input:

Contenuto del file:

foo

bar

baz

Quindi ho eseguito questo comando:

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

Questo stamperà solo le linee con input out. Non ho familiarità con sendEmail; ha bisogno che il corpo sia su stdin o puoi passarlo sulla cmdline?

Altri suggerimenti

Sai che puoi farlo direttamente in Gmail usando un filtro e il tuo gateway e-mail SMS, giusto?

Ma torniamo alla domanda ...

È possibile ottenere il controllo in uno script shell per l'output del comando con il seguente modello di progettazione:

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

Leggi inserisce la prima parola in a , la seconda in b e il resto della riga in restofline . Se il ciclo è composto da un solo comando, il programma xargs probabilmente farà esattamente quello che vuoi. Leggi in particolare il parametro -I che ti consente di posizionare l'argomento sostituito ovunque nel comando.

A volte il ciclo sembra ... | mentre leggi x; do , che mette l'intera riga in x .

Prova questa struttura:

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

Darei un'occhiata al comando xargs , che fornisce tutte le funzionalità di cui hai bisogno (per quanto posso dire).

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

Forse qualcosa del genere:

curl_command > some_file
if [[ `wc -l some_file` != "0 some_file" ]] ; then
  email_command < some_file
fi
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top