我有一個程序(服務器),我正在尋找一種方式(腳本),將重定向(或更好地複製)其所有stdout
文件併爲每個條目添加時間戳。我已經做了一些研究,最遠的地方是得到How to add timestamp to STDERR redirection。它重定向stdout
倒是時間戳的時候腳本完成:Bash - 如何添加時間戳,同時重定向stdout文件
#!/bin/bash
./server | ./predate.sh > log.txt
predate.sh
:
#!/bin/bash
while read line ; do
echo "$(date): ${line}"
done
我是一個Linux初學者,我顯然失去了一些東西很重要,因爲它似乎服務器輸出在程序退出後被刷新(不重定向就可以正常工作)。另外,如果我嘗試使用predate.sh
對提到的線程給出的例子,它完美的作品。我知道將時間戳添加到主程序很容易,但我寧願避免編輯它的代碼。
編輯:唯一的工作答案都在評論
所以問題是,所有的時間戳是相同的,當腳本結束的時候?聽起來像這是'服務器'輸出沒有正確緩衝的問題。 http://stackoverflow.com/questions/3465619/how-to-make-output-of-any-shell-command-unbuffered可能是你在找什麼 – Graeme
輸出到_awk_。它提供了一個叫做_strftime_的函數。 – devnull
'expect'發行版帶有一個名爲['unbuffer']的程序(http://linuxcommand.org/man_pages/unbuffer1.html):'unbuffer ./server | ./predate.sh> log.txt' –