我有一个程序(服务器),我正在寻找一种方法(脚本),将所有的stdout重定向(或更好地复制)到文件并为每个条目添加时间戳.
我做了一些研究,我能得到的最远的是得益于How to add timestamp to STDERR redirection.它重定向stdout但添加的时间戳是脚本完成的时间:
#!/bin/bash
./server | ./predate.sh > log.txt
predate.sh的代码:
#!/bin/bash
while read line ; do
echo "$(date): ${line}"
done
似乎退出程序后刷新服务器输出.(没有重定向它工作正常).此外,如果我尝试在提到的线程中的给定示例使用predate.sh,它完美地工作.我知道在主程序中添加时间戳很容易,但我宁愿避免编辑它的代码.
解决方法:
我最近需要的是:在串行控制台(picocom)中接收日志消息,将它们打印到终端和文件并预先设置日期.
我现在使用的是什么.像这样:
picocom -b 115200 /dev/tty.usbserial-1a122C | awk '{ print strftime("%s: "), $0; fflush(); }' | tee serial.txt
> picocom的输出通过管道传输到awk
> awk预置日期(%s选项将时间转换为自1970-01-01 00:00:00 UTC以来的秒数 – 或使用%c作为人类可读的格式)
> fflush()flushes any buffered output在awk中
>用管道输送到T恤,将其转移到文件中. (你可以找到一些关于tee here的东西)
标签:bash,linux,redirect
来源: https://codeday.me/bug/0928/1827896.html