Sending mail from command line if body not empty
Solution 1:
"man mail" tells me that the argument -E stopps sending mails if body is empty. works fine for me.
-E
If an outgoing message does not contain any text in its first or only message part, do not send it but discard it silently, effectively setting the skipemptybody variable at program startup. This is useful for sending messages from scripts started by cron(8).
Solution 2:
output=$(grep line /var/log/file); [[ -n "$output" ]] && mail -s Log [email protected]
Or you can make this into a cron job and then if it produces any output it will email the users. You can edit the /etc/aliases file (and then run newaliases command) to send mail to address not on the box.
Ex of cron entry (You won't be able to set the subject line thogh
1 0 * * * grep line /var/log/file
Or you can get the ifne utility - This is probably what you want
grep line /var/log/file | ifne mail -s Log [email protected]
The ifne command it availabe from the epel repo for centos and RHEL. I can't find a link to the man page online but there it is
ifne(1)
ifne(1)NAME ifne - Run command if the standard input is not empty
SYNOPSIS ifne [-n] command
DESCRIPTION ifne runs the following command if and only if the standard input is not empty.
OPTIONS -n Reverse operation. Run the command if the standard input is emp- ty.
Note that if the standard input is not empty, it is passed through ifne in this case.
EXAMPLE find . -name core | ifne mail -s "Core files found" root
AUTHOR Copyright 2008 by Javier Merino
Licensed under the GNU GPL 2008-05-01 ifne(1)