Shell Scripting sendmail逐行格式

时间:2014-03-25 12:28:26

标签: bash shell format sh sendmail

我正在编写一个shell脚本,它使用sql plus获取一些值并将其放入名为“result”的变量中。

当我写回“$ result”时,输出是(正如预期的那样):

       1      2029
    -32         9
    -19      2579
    -36      1039
    -35         2
    -33      1336

但是当我通过电子邮件发送到我的邮箱地址时,邮件的格式为:

1 2029 -32 9 -19 2579 -36 1039 -35 2 -33 1336

这是我的代码:

result=$(sqlplus -s user/password%@IDB  << EOF
set trimspool on;
set linesize 32000;
SET SPACE 0;
set HEADING off;
set feedback off;
SELECT ...
exit;
EOF)

  echo -e $result | mailx -s "KLON ILK BILDIRIM SONUCLARI" $MAIL_LIST

我怎样才能把它放到正确的格式中,为什么“回声结果”和邮件格式的结果不同?

2 个答案:

答案 0 :(得分:2)

您以不同的格式获取相同的数据,因为它在一个实例中引用,而在另一个实例中不引用。在mail命令周围加上双引号,并保留换行符:

echo "$result" | mailx -s "KLON ILK BILDIRIM SONUCLARI" $MAIL_LIST

发生这种情况的原因是shell在$result执行之前会扩展echo。由于默认IFS包含换行符,因此$result中的换行符被视为字段分隔符而不是实际换行符。引用变量时,将变量内的所有内容视为单个参数,因此保留换行符。

答案 1 :(得分:1)

使用括号。您无需将结果保留在此操作的变量中。

{
sqlplus -s user/password%@IDB  << EOF
something
...
exit;
EOF
} | mailx -s "KLON ILK BILDIRIM SONUCLARI" $MAIL_LIST