我有一个程序(服务器),我正在寻找一种方式(脚本),将重定向(或更好地复制)其所有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' –