我有Ubuntu Linux。我发现一个命令可以让我从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"
...然后另一个让我轻松发送邮件的命令(一旦我通过apt-get安装了sendemail命令):
sendEmail -f EMAIL@DOMAIN.COM -v -t PHONE@SMS.COM -u Gmail Notifier -m test -s MAILSERVER:PORT -xu EMAIL@DOMAIN.COM -xp PASSWORD
(请注意,在制作中我可能会将-v与上面的-q交换。)
因此,如果一个命令下载一行主题,我该如何将它们传递到sendEmail命令?
例如,我尝试在两者之间使用管道字符,我在-m参数后使用“$ 1”,但发生的事情是,当我没有未读电子邮件时,它仍然会向我发送至少一条空消息。
如果您对此有所帮助,我将使用此信息在StackOverflow上分享如何构建可以在手机上连接短信的Gmail通知程序。
答案 0 :(得分:1)
试试这个结构:
while read line
do
sendemailcommand ... -m $line ...
done < <(curlcommand)
答案 1 :(得分:1)
你知道你可以使用过滤器和你的短信电子邮件网关直接在gmail中做到这一点,对吗?
但回到问题......
您可以使用以下设计模式在shell脚本中获取对命令输出的控制权:
command1 | while read a b c restofline; do
: execute commands here
: command2
done
阅读将第一个单词放在a
中,第二个单词放在b
中,其余部分放在restofline
中。如果循环只包含一个命令,那么xargs
程序可能就是你想要的。请特别阅读-I
参数,该参数允许您将替换参数放在命令中的任何位置。
有时循环看起来像... | while read x; do
,它将整行放入x
。
答案 2 :(得分:1)
我想如果你混合使用viraptor&amp; DigitalRoss'回答你得到你想要的。我通过使用以下输入创建一个假文件来创建一个示例测试:
文件内容:
foo
bar
baz
然后我运行了这个命令:
% cat ~/tmp/baz | while read x; do if [[ $x != "" ]]; then echo "x: '$x'"; fi; done
这只会打印输出输出的行。我不熟悉sendEmail;它是否需要身体在stdin上或者你能否在cmdline上传递它?
答案 3 :(得分:0)
我会查看xargs
命令,它提供了您需要的所有功能(据我所知)。
答案 4 :(得分:0)
也许是这样的:
curl_command > some_file
if [[ `wc -l some_file` != "0 some_file" ]] ; then
email_command < some_file
fi