我有一种情况,我想将错误和日志消息发送到同一个文件。为了区分错误和日志消息,我附加了这样的日志消息:
文件看起来像这样:
===============log_and_error_msg.txt =========
ERR: This message is an error message
INF: This is a log message
这样任何对错误消息感兴趣的人都可以grep "ERR" log_and_error_msg.txt
假设我正在执行这样的shell脚本
./shellscript 2>>log_and_error_msg.txt 1>>log_and_error_msg.txt
如何在飞行中为每条消息添加ERR和INF?
答案 0 :(得分:2)
#!/bin/bash
exec 3> >(sed 's/^/INF: /' >> prepend.log)
exec 4> >(sed 's/^/ERR: /' >> prepend.log)
echo "some information" >&3
echo "an error" >&4
echo "more information" >&3
echo "this goes to the screen"
echo "this goes to stderr, bypassing the log" >&2
echo "another error" >&4
echo "yet more information" >&3
echo "still information" >&3
echo "oops" >&4
答案 1 :(得分:1)
你可以使用sed。在每个管道中插入sed 's/^/TYPE /'
,将TYPE替换为ERR:
或INF:
答案 2 :(得分:0)
尝试将stderr重定向到临时文件。
./testscript.sh 2> err.tmp | ( while read line ; do echo 'INFO: ' $line ; done ) ; ( while read line ; do echo 'ERR: ' $line ; done ) <err.tmp
答案 3 :(得分:0)
{ { ./shellscript | sed 's/^/INF: /'; } 2>&1 1>&3 | sed 's/^/ERR: /'; } \ >> log_and_error_message.txt 3>&1