shell—从配置单元读取数据并以html显示

6tdlim6h  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(329)

我正在尝试通过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函数时都出现在同一个地方。
有人能告诉我是什么导致了随机空间的引入吗?

xoefb8l8

xoefb8l81#

您正在将html构建为一条长线。
outlook对行长有一些问题,它会在一定数量的字符后插入新行。这句新词造成了这样的词语空缺。有时它被插入不在字里面而且它被显示好然后。
解决方案是在html标记之间插入行制动器。这样地:

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 应引用变量: echo -e "$table_body"

相关问题