我正在尝试通过shell脚本从配置单元表读取数据,并使用html通过电子邮件发送配置单元查询返回的结果。但是,shell脚本生成的电子邮件中通常会引入一个随机空格。
下面是我的shell脚本中的代码段:
function sendAlertEmail {
res=`hive -e 'set hive.cli.print.header=false;set hive.execution.engine=tez;select rule_id,kpi_area,rule_desc,cast(current_result as decimal(5,2)),current_run_ts,cast(previous_result as decimal(5,2)),previous_run_timestamp,email_id from email_alert;' | tr -s '\t' '|'`
size=${#res[@]}
table_body=
IFS=$'\n'
for lines in $res
do
IFS='|' read -r -a array <<< "$lines"
table_body="$table_body <tr><td>${array[0]}</td><td>${array[1]}</td><td>${array[2]}</td><td>${array[3]}</td><td>${array[4]}</td><td>${array[5]}</td><td>${a
rray[6]}</td></tr>"
email_id=${array[7]}
done
if [[ -z $table_body ]];then
echo "No records found"
exit 0
fi
table_body="<table border='1'><thead><th>RULE_ID</th><th>KPI_AREA</th><th>RULE_DESC</th><th>CURRENT_RESULT</th><th>CURRENT_RUN_TIMESTAMP</th><th>PREVIOUS_RESULT
</th><th>PREVIOUS_RUN_TIMESTAMP</th></thead><tbodY>$table_body</tbody></table>"
table_body="$table_body <br/><i>This is an automated email. Do not reply to this email"
(cat <<END; echo -e $table_body) | /usr/sbin/sendmail -t
Subject: Alert Email
From:
To: $email_id
Content-Type: text/html;
X-Priority: 1
END
}
附件是随机空间收到的电子邮件截图。
注意单词“wireless”中第五条记录中的空格。这个空间是随机的,并不是每次我调用email函数时都出现在同一个地方。
有人能告诉我是什么导致了随机空间的引入吗?
1条答案
按热度按时间xoefb8l81#
您正在将html构建为一条长线。
outlook对行长有一些问题,它会在一定数量的字符后插入新行。这句新词造成了这样的词语空缺。有时它被插入不在字里面而且它被显示好然后。
解决方案是在html标记之间插入行制动器。这样地:
第一次也是一样
for lines
循环。不要忘了检查所有代码是否正确使用包含换行符的变量。比如这个
echo -e $table_body
应引用变量:echo -e "$table_body"