2014-01-09 80 views
0

我編寫了一個shell腳本,我在ash下使用,並將stderr和stdout重定向到日誌文件。我希望只有當stderr不爲空時,才能通過電子郵件將該日誌文件發送給我。如何在電子郵件shell腳本中發送stderr(灰)

我想:

exec >mylog.log 2>&1 

# Perform various find commands 

if [TEST_IF_STDERR_NOT_EMPTY]; then 
/usr/bin/mail -s "mylog" [email protected] < mylog.log 
fi 

我的問題是雙重的:

1 - 我得到了-sh: /usr/bin/mail: not found錯誤。看起來郵件命令不存在於ash下(或者至少在我的linux盒子裏,這是一個Synology NAS),有什麼選擇?最壞的情況下,perl可用,但我寧願使用標準的sh命令。

2-如何測試stderr不是空的?

感謝

回答

0

How to check if file is empty in bash

關於第一個問題,在你的代碼,你在呼喚你在呼喚emailmail但較低。檢查你的代碼,並確保它是mail

使用which mail獲取完整路徑。也許它沒有安裝在/ usr/bin /中。 使用find查找mail。 如果您可以轉到另一個shell,請運行它,然後執行which mail以獲取郵件的完整路徑,以便在備用shell中設置路徑。

+0

我的問題有一個錯字。它確實說「郵件」而不是「電子郵件」。我糾正了它。此外,我已經嘗試過哪些(沒有返回任何東西)並找到(返回'-sh:locate:not found')無濟於事。最後,你指向我的線程對我來說不起作用,因爲它檢查一個文件是否爲空,但在我的情況下,日誌不是空的,它包含stderr和stdout,我只想知道stderr是不爲空(日誌文件永遠不會爲空,因爲它始終有stdout)。 – user3022204

+0

嘗試mailx。如果找不到它,請安裝它。 – Hameed

+0

我沒有找到mailx,但我的經理讓電子郵件部分使用sendmail。但是,關於我的第二個問題,我試過'如果[-s 2];然後'測試是stderr是空的,但似乎沒有工作。我認爲這是因爲2被重定向到我的日誌文件,所以它是空的。我如何測試stderr中是否有東西? – user3022204