Bash

如果腳本輸出字元串,則發送電子郵件

  • January 5, 2019

我發現這一行:

sh script.sh | grep 'NO' 2>&1 > grep.log && /usr/bin/mail -s "grep found something" m@mail.com < grep.log

這會將 script.sh 的輸出寫入 grep.log,然後通過電子郵件將其發送到電子郵件 m@mail.com

有沒有辦法刪除這部分寫入 grep.log 並簡單地郵寄腳本的輸出而不必將其寫入文件?

您可以將輸出擷取到 shell 變數而不是日誌文件:

found_stuff=$(sh script.sh | grep 'NO' 2>&1) &&
   echo "$found_stuff" | /usr/bin/mail -s "grep found something" m@mail.com

(注意:第一行必須是一個普通的變數賦值,而不是export var=or local var=ordeclare var=或類似的東西。在這些情況下,&&取決於exportetc 命令的退出狀態,而不是grep。)

要直接發送郵件,您可以使用如下命令:

sh script.sh | grep 'NO' 2>&1 | /usr/bin/mail -s "grep found something" m@mail.com

引用自:https://serverfault.com/questions/945699