尝试将变量内容定向到命令中会产生模糊重定向

尝试将变量内容定向到命令中会产生模糊重定向

我正在尝试编写一个脚本来测试来自我运行的各种 Node 服务器的 http 响应,然后如果有来自 Nginx 的 502 错误响应(意味着一台或多台服务器已崩溃),该脚本会向我发送电子邮件。

我的方法是编写一个 shell 脚本并将其作为 cron 作业运行,并且我使用 ssmtp 通过 Gmail 发送消息。这是一个片段:

messageTemplate=`cat /home/sites/mailmsg.txt`
...
email="$messageTemplate One or more sites is down!"
mailCommand=`mail -s [email protected] < $email`

我能够毫无问题地获取 ssmtp 邮件模板的内容(收件人:、发件人:等)。我确信电子邮件行连接得很好。问题是 mailCommand 行失败并显示以下行:

line 31: $email: ambiguous redirect

mail将本质上是 messageTemplate + 自定义消息的内容通过管道传输到第一个命令(在本例中为)的正确方法是什么?

答案1

我的水晶球认为您的消息文本可能包含以下之一<>

在我看来就像你的用法

mailCommand=`mail -s [email protected] < $email`

不会执行您想要的操作:这会将 的内容$email作为文件名(由于$email包含几个单词而有所失败),尝试读取其内容,将这些内容放入命令中mail,然后将命令的输出分配mail给变量mailCommand

我的想法是你想要类似的东西

echo "$email" | mail -s [email protected]

即获取变量中的字符串email并将其提供给邮件程序?

(顺便说一句,现在许多人更喜欢$(foo)命令替换的表示法,而不是反引号。)

答案2

messageTemplate=`cat /home/sites/mailmsg.txt`
...
mailCommand=`echo "$messageTemplate One or more sites is down"\! | mail -s [email protected]`

或者

email="$messageTemplate One or more sites is down"\!
mailCommand=`echo "$email" | mail -s [email protected]`

相关内容