我试图通过shell脚本从hive表中读取数据,并通过使用html的电子邮件将hive查询的返回结果发送出去。但是,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
}
随附的是随机空间收到的电子邮件的屏幕截图。
请注意“无线”一词在第五条记录中的空格。此空间是随机的,每次调用电子邮件功能时,它不会出现在同一位置。
任何人都可以让我知道是什么原因导致引入随机空间吗?
答案 0 :(得分:1)
您正在将HTML构造为单个长行。
Outlook在行长方面存在一些问题,它在一定数量的字符后插入新行。这一新行在字词上造成了这种差距。有时,它未插入单词内,然后显示得很好。
解决方案是在HTML标签之间插入刹车。 像这样:
def is_test(a):
x = a
y = a
print(x is y)
is_test(257)
is_test('a' * 21)
与第一个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>"
循环相同。
也不要忘记检查所有代码是否与包含换行符的变量一起正常工作。例如,应将变量for lines
用引号引起来:echo -e $table_body