Bash 仅在命令 returns 输出时发送邮件的脚本
Bash script to send mail only if command returns output
我正在尝试编写一个 bash 脚本,在某些文件被修改时提醒我。
所以我写了这个:
MYOUT=$(/usr/bin/find /home/public_html/ \( -iname "*.js" -o -iname "*.tpl" -o -iname "*.php" \) -mtime -1)
if [[ -n $? ]]
then
mail -s "Hack attempt" my_mail@gmail.com <<<"$MYOUT"
fi
但即使没有找到文件,它也会发送一封邮件。
我错过了什么?
当 /usr/bin/find
根据其参数找到某个文件时,会发生两个事件:return 状态被设置为变量 $?
中的某个值,并且一个字符串被输出到变量 $MYOUT
,根据您的代码。
从你的问题“...仅当命令 returns 输出时才发送邮件的脚本”,我可以推断你想使用第二种方法来决定发送邮件。
在那种情况下,您必须如下更改测试条件,检查 $MYOUT
的值而不是 $?
的值,将测试放在单个方括号中:
MYOUT=$(/usr/bin/find /home/public_html/ \( -iname "*.js" -o -iname "*.tpl" -o -iname "*.php" \) -mtime -1)
if [ -n "$MYOUT" ]
then
mail -s "Hack attempt" my_mail@gmail.com <<<"$MYOUT"
fi
另一个选项是检查变量赋值的退出状态。
if MYOUT=$(/usr/bin/find /home/public_html/ \( -iname "*.js" -o -iname "*.tpl" -o -iname "*.php" \) -mtime -1); then
mail -s "Hack attempt" my_mail@gmail.com <<<"$MYOUT"
fi
或者,检查退出状态,如
MYOUT=$(/usr/bin/find /home/public_html/ \( -iname "*.js" -o -iname "*.tpl" -o -iname "*.php" \) -mtime -1)
case $? in
0) mail -s "Hack attempt" my_mail@gmail.com <<<"$MYOUT";;
esac
我正在尝试编写一个 bash 脚本,在某些文件被修改时提醒我。 所以我写了这个:
MYOUT=$(/usr/bin/find /home/public_html/ \( -iname "*.js" -o -iname "*.tpl" -o -iname "*.php" \) -mtime -1)
if [[ -n $? ]]
then
mail -s "Hack attempt" my_mail@gmail.com <<<"$MYOUT"
fi
但即使没有找到文件,它也会发送一封邮件。
我错过了什么?
当 /usr/bin/find
根据其参数找到某个文件时,会发生两个事件:return 状态被设置为变量 $?
中的某个值,并且一个字符串被输出到变量 $MYOUT
,根据您的代码。
从你的问题“...仅当命令 returns 输出时才发送邮件的脚本”,我可以推断你想使用第二种方法来决定发送邮件。
在那种情况下,您必须如下更改测试条件,检查 $MYOUT
的值而不是 $?
的值,将测试放在单个方括号中:
MYOUT=$(/usr/bin/find /home/public_html/ \( -iname "*.js" -o -iname "*.tpl" -o -iname "*.php" \) -mtime -1)
if [ -n "$MYOUT" ]
then
mail -s "Hack attempt" my_mail@gmail.com <<<"$MYOUT"
fi
另一个选项是检查变量赋值的退出状态。
if MYOUT=$(/usr/bin/find /home/public_html/ \( -iname "*.js" -o -iname "*.tpl" -o -iname "*.php" \) -mtime -1); then
mail -s "Hack attempt" my_mail@gmail.com <<<"$MYOUT"
fi
或者,检查退出状态,如
MYOUT=$(/usr/bin/find /home/public_html/ \( -iname "*.js" -o -iname "*.tpl" -o -iname "*.php" \) -mtime -1)
case $? in
0) mail -s "Hack attempt" my_mail@gmail.com <<<"$MYOUT";;
esac