Bash

試圖將變數內容引導到命令中會產生歧義重定向

  • February 6, 2016

我正在嘗試編寫一個腳本來測試來自我正在執行的各種節點伺服器的 http 響應,然後如果有任何響應來自 Nginx 的 502 錯誤(意味著一個或多個伺服器已崩潰),它會通過電子郵件發送給我。

我的方法是編寫一個 shell 腳本並讓它作為 cron 作業執行,我使用 ssmtp 通過 Gmail 發送消息。這是一個片段:

messageTemplate=`cat /home/sites/mailmsg.txt`
...
email="$messageTemplate One or more sites is down!"
mailCommand=`mail -s info@redearmedia.ca < $email`

我能夠毫無問題地獲取 ssmtp 郵件模板的內容(收件人:、發件人:等)。而且我確信電子郵件行連接得很好。問題是 mailCommand 行失敗並顯示以下行:

line 31: $email: ambiguous redirect

將本質上是 messageTemplate + 自定義消息的內容通過管道傳輸到第一個命令(在本例中為mail)的正確方法是什麼?

我的水晶球認為您的消息文本可能包含一個<或多個>

在我看來你的用法

mailCommand=`mail -s info@redearmedia.ca < $email`

不會做你想做的事:這會將 的內容$email作為文件名(由於$email包含幾個單詞而有些失敗),嘗試讀取其內容,將這些內容放入mail命令中,然後將mail命令的輸出分配給變數mailCommand.

我的想法是你想要類似的東西

echo "$email" | mail -s info@redearmedia.ca

即獲取變數中的字元串email並將其提供給郵件程序?

(作為旁注,現在許多人更喜歡$(foo)命令替換的符號,而不是反引號。)

引用自:https://unix.stackexchange.com/questions/260375