意外的EOF,同时寻找匹配')'

问题描述:

当我尝试手动运行下面的脚本时,出现以下2个错误输出。我不明白的是为什么它会抱怨找不到')'的匹配字符?在那里我好像提取then/fi里面的内容,并将它放在一个文件中,然后单独运行它,它可以很好地发挥作用,因为它可以发送电子邮件。意外的EOF,同时寻找匹配')'

./rsnapshot-log-checker: line 15: unexpected EOF while looking for matching `)' 
./rsnapshot-log-checker: line 25: syntax error: unexpected end of file 

grep "ERROR" /var/log/rsnapshot.log | \ 
while read line ; do 
     echo "$line" | grep "ERROR" 
     if [ $? = 0 ] 
     then 
       [email protected] 
       subject="Error rsnapshot - `hostname`" 
       from=`hostname`@bla.com 
       daemail=$(cat <<! <-- line 15 
         From: $from 
         To: $to Subject: 
         $subject You might want to check this... !) <-- maching haracter for) 

       echo "$daemail" | /usr/sbin/sendmail -t 
     fi 
done 
<-- line 25 

您正在使用此文档重定向运算符(< <)在第15行,这是造成问题。 使用下列内容:

daemail=$(cat 
     echo "From:" $from 
     echo "To:" $to "Subject:" 
     echo $subject "You might want to check this... !") 
+0

烨似乎已经完成了帽子戏法。虽然它仍然有点困扰我为什么它自己的工作,而不是在if语句。 –

这里的文件分隔符has to appear on a line by itself

+0

是的,我可以看到,这是这里的问题 - 但是Nishu答案提供了一个很好的清洁解决方案,所以我接受了他的答案:)你+1 –