我有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命令?

例如,我尝试在两者之间使用管道字符,我在其中使用了“$ 1”。在-m参数之后,但发生的事情是,当我没有未读电子邮件时,它仍然会向我发送至少一条空消息。

如果您对此有所帮助,我将使用此信息在StackOverflow上分享如何构建可以在手机上连接短信的Gmail通知程序。

有帮助吗?

解决方案

我想如果你混合使用viraptor&amp; DigitalRoss'回答你得到你想要的。我通过使用以下输入创建一个假文件来创建一个示例测试:

文件内容:

foo

bar

baz

然后我运行了这个命令:

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

这只会打印输出输出的行。我不熟悉sendEmail;它是否需要身体在stdin上或者你能否在cmdline上传递它?

其他提示

你知道你可以使用过滤器和你的短信电子邮件网关直接在gmail中做到这一点,对吗?

但回到问题......

您可以使用以下设计模式在shell脚本中获取对命令输出的控制权:

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

Read将第一个字放在 a 中,第二个放在 b 中,其余部分放在 restofline 中。如果循环只包含一个命令,那么 xargs 程序可能就是你想要的。特别阅读 -I 参数,该参数允许您将替换参数放在命令的任何位置。

有时循环看起来像 ... |读x;执行,将整行放入 x

试试这个结构:

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

我会看一下 xargs 命令,它提供了你需要的所有功能(据我所知)。

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

也许是这样的:

curl_command > some_file
if [[ `wc -l some_file` != "0 some_file" ]] ; then
  email_command < some_file
fi
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top