2017-02-17 61 views
2

我有這個shell代碼在crontable中執行。添加日期作爲前綴stderr&標準輸出

/path/to/script args >> /path/logfile 2>> test.txt && echo "$(date) success" >> /path/logfile || echo "$(date) errors" >> /path/logfile 

它寫在以這種方式格式化日誌文件:

STDOUT 
DATE success 
STDERROR 
DATE errors 

其實我想,因爲幾小時前給它這樣的格式,但我沒有成功...

DATE success: stdout (without newlines) 
DATE errors: stderr (without newlines) 
+1

ŧ他只是一個行分隔符,將其從命令中刪除。 – Inian

+1

同時控制你的腳本如何寫入'stdout',應該從腳本本身而不是外部控制(如果可能的話)。 – Inian

+1

\不是行分隔符。如果不是在行的最後,它只是開始一個轉義序列。在行尾,它被解釋爲一個連續字符 – hek2mgl

回答

1

您可以用腳本編寫一個簡單的解決方案:

/path/to/script args >/path/tmp/log.out 2>/path/tmp/log.err 
if [ ! -s /path/tmp/log.err ]; then 
    echo -n "$(date) success: " >> /path/logfile 
    cat /path/tmp/log.out >> /path/logfile 
else 
    echo -n "$(date) errors: " >> /path/logfile 
    cat /path/tmp/log.err >> /path/logfile 
fi 
+0

感謝您的回答,但避免換行符不是真正的問題; –

+0

我想在輸出之前打印$(date)。現在它打印輸出,然後日期 –

+0

真的嗎?我認爲這只是一個順序問題......場景是(如果退出代碼是2,那麼我會打印$ date錯誤:stderror else $ date success:stdout)我對shell不太熟悉,所以我不' t知道如何做到這一點 –