linux - 将三个 echo 语句的输出通过管道传递到邮件

标签 linux email shell unix solaris

echo "Total items: `echo $QUERY1 | awk '{print $1}'`"
echo "Total Error: `echo $QUERY1 | awk '{print $2}'`"
echo "Percentage: $QUERY2"

如何使用 mail 命令 在一封电子邮件中发送这三样东西。所以每当我收到任何电子邮件时,邮件正文应该像下面这样,在每一行中应该有一个 echo 语句-

Total items:-    Some Number
Total Error:-   Some Number
Percentage:-   Some Number

我正在运行 SunOS

bash-3.00$ uname -a 
SunOS lvsaishdc3in0001 5.10 Generic_142901-02 i86pc i386 i86pc 

最佳答案

你的要求不完全清楚,但试试这个

{
    echo "Total items: `echo $QUERY1 | awk '{print $1}'`"
    echo "Total Error: `echo $QUERY1 | awk '{print $2}'`"
    echo "Percentage: $QUERY2"
} | mail -s "subject" toUser1@xyz.com,toUser2@abc.com

{ .. } 对创建一个进程组,所有标准输出都重定向到 1 |(管道),它连接到标准输入你的邮件程序。

您可能需要使用mailx-s指定主题,我从您关于该主题的其他问题中看到您似乎理解。

此外,sendmail 也需要运行并正确配置,以便从您执行此脚本的机器发送任何邮件。

健康教育


编辑:2015-11-07

刚刚为此获得了一个“不错的答案”星,在审查时,我很惊讶我没有对过度使用流程发表评论。对于这种情况,这可以减少到对 awk 的一次调用,即

awk -v q1="$QUERY1" -v q2="$QUERY2" \
 'END {
    split(q1,q1arr)
    print "Total items: " q1arr[1] \
          "Total Error: " q1arr[2] \
          "Percentage: " q2
}' /dev/null \
| mail -s "subject" toUser1@xyz.com,toUser2@abc.com

或者对于单行人群 ;-),即

awk -v q1="$QUERY1" -v q2="$QUERY2" 'END {split(q1,q1arr);print "Total items: " q1arr[1] "\nTotal Error: " q1arr[2] "\nPercentage: " q2 }' /dev/null | mail -s "subject" toUser1@xyz.com,toUser2@abc.com

在这种情况下不需要 { .. },因为只有一个进程连接到管道。

对于每天发送一次总结报告的情况,原始代码是完全可用的(但不是最优的)。但是,非最佳编码会导致不良习惯。在一天运行 1000 次的循环中调用 5 个进程就足够了,将不必要地消耗计算资源。

最后,作为 o.p.不包含任何示例数据,代码仅经过轻微测试。

关于linux - 将三个 echo 语句的输出通过管道传递到邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11875689/

相关文章:

linux - shell函数和参数传递问题

linux - 强制卸载 NFS 挂载的目录

linux - 关闭终端输入行前缀/标题

c# - 使用 c# asp.net 在从网站发送的电子邮件中显示图像

email - 普罗米修斯警报管理器 "to"字段中的多个电子邮件接收器

linux - 混淆了 shell 脚本从文件中读取 CSV 数据

linux - 使用汇编在 Linux 终端中清除屏幕?

python - 为什么 python 要求我在输入相同的内容后一遍又一遍地输入相同的内容 - (smtplib - gmail)

linux - 如何在 crontab 中使用 tee 命令

c++ - 为 shell 输出重定向创建文件