管道命令到mailx,如果没有内容则不发送邮件

时间:2015-07-16 21:40:35

标签: bash pipe mailx

我的系统(rhel5)不支持mailx -E选项(如果正文为空,则不发送电子邮件)。我可以用一个衬垫来模拟这个功能吗?例如,第一个会发送,但第二个不会发送

echo 'hello there' | blah | mailx -s 'test email' me@you.com
echo '' | blah | mailx -s 'test email' me@you.com

2 个答案:

答案 0 :(得分:0)

您可以尝试使用技巧而不是程序来管道:

msg='hello there' && [ -n "$msg" ] && echo "$msg" | mailx -s 'test email' me@you.com

如果您的消息来自其他脚本,则必须将其作为

运行
msg="$(get_it)" && [ -n "$msg" ] && echo "$msg" | mailx -s 'test email' me@you.com

如果不支持[ ... ],您还可以使用[[ ... ]]

msg="$(get_it)" && [[ -n "$msg" ]] && echo "$msg" | mailx -s 'test email' me@you.com

答案 1 :(得分:0)

好。 "一衬垫"是一种相对的,因为这些是技术上的单行,但它们可能不适合你:

stuff=$(echo 'hello there') ; [ -n "${stuff}" ] && echo ${stuff} | mailx -s 'test email' me@you.com
stuff=$(echo '') ; [ -n "${stuff}" ] && echo ${stuff} | mailx -s 'test email' me@you.com