linux - 在 BASH 脚本中将日期插入到 "MAIL"消息正文中

标签 linux bash email debian-stretch

我有一个相对简单的 BASH 脚本来从我的 Raspberry Pi 发送邮件。第一个参数是主题行,第二个是要附加的一串数据文件。

当我将消息正文指定为文件时(第 6 行),它基本上可以正常工作。但是,如果我尝试创建一个包含日期作为消息正文的文本字符串,它会失败(第 7 行)。这是我的脚本:

#!/bin/bash
#echo $2
# To
TO="me@hotmail.com"
# Message
MESSAGE="output/MessageBody.txt"
MESSAGEx="Midnight `date '+%Y-%m-%d %H:%M:%S %Z'` Pi report"
echo $MESSAGE
echo $MESSAGEx

temp=$(echo $2 | tr ";" "\n")
declare -a attargs
for att in $temp; do
  attargs+=( "-A"  "$att" )
done
# Sending email using /bin/mail
/usr/bin/mail -s "$1" "$TO" ${attargs[@]}  < $MESSAGEx

下面是这个命令的输出

/usr/pgms/sendtome.sh "test message" "/mnt/usbdrive/output/JSONstart.txt;/mnt/usbdrive/output/Outback_error.log;/mnt/usbdrive/output/OutbackReaderPrint.txt"

当我将 MESSAGEx 指定为消息正文时:

/mnt/usbdrive/output/MessageBody.txt

Midnight 2019-08-14 07:40:31 MDT Pi report

/usr/pgms/sendtome.sh: line 22: $MESSAGEx: ambiguous redirect

如果我使用 MESSAGE,即文本文件引用,它就可以工作。 它如何创建包含日期或其他一些项目的邮件正文文本段落?谢谢....RDK

最佳答案

这里有很多问题。

  • 你通常应该quote strings.不加引号,< 之后的字符串被拆分(因此出现错误消息),您非常小心收集的数组将失去其用途。
  • < 之后的事情需要是一个文件的名称。在 Bash 中,您可以在此处使用字符串 <<<"$MESSAGEx"但常见且简单的可移植解决方案是 echo (或更好的 printf )将其值放入管道中。
  • 您的私有(private)变量名称应该更喜欢小写,但这主要是一种风格上的建议。 (有像 PATHSHELL 这样的保留变量,您真的不想破坏它们;POSIX 保留大写变量名称供系统使用。)

这是一个试图解决这些问题的重构。

#!/bin/bash
to="me@hotmail.com"
# Message
#msgfile="output/MessageBody.txt"
msgbody="Midnight `date '+%Y-%m-%d %H:%M:%S %Z'` Pi report"
#echo "$msgfile"
#echo "$msgbody"

declare -a attargs
for att in $(echo "$2" | tr ";" "\n"); do
  attargs+=( "-A"  "$att" )
done

/usr/bin/mail -s "$1" "${attargs[@]}" "$to"<<< "$msgbody"

也许更好的设计是 shift第一个参数然后使用 "$@"作为要附加的文件列表。

关于linux - 在 BASH 脚本中将日期插入到 "MAIL"消息正文中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57496169/

相关文章:

c++ - 如何在 Windows 的 wchar_t 和 GCC/Linux 之间转换(不一定以编程方式)?

linux - 如何在命令行中将 markdown 转换为 pdf

Excel VBA : Send HTML email using IBM Notes

java - 通过 shell 命令安装项目

linux - 安装在 ubuntu 计算机上的 Amazon EC2 实例的 var/www 文件夹在一段时间后卡住

bash - 是否有与 Linux Bash 的 .bashrc 等效的 Windows 10 PowerShell?

javascript - 如何验证包含国际字符的电子邮件地址

javascript - 使用 jquery 显示电子邮件地址有什么问题

python - 如何将多个变量从 python 返回到 bash

bash - "Yarn: command not found"即使安装后