【发布时间】:2012-11-16 07:07:58
【问题描述】:
我想做以下事情;
- 将 stdout 的副本重定向到日志文件并将 stdout 保留在屏幕上。
- 将 stderr 重定向到同一个日志文件,并且不显示在屏幕上。
没有标准输出到屏幕的代码:
#!/bin/bash
exec 1> >(sed -u 's/^/INF: /' >> common.log)
exec 2> >(sed -u 's/^/ERR: /' >> common.log)
echo "some txt"
echo "an error" >&2
echo "some more txt"
echo "one more error" >&2
日志:
INF: some txt
INF: some more txt
ERR: an error
ERR: one more error
第一个问题是缓冲,我试图用 sed '-u' 否定它以表示无缓冲。
标准输出到屏幕的代码:
#!/bin/bash
exec 1> >(sed -u 's/^/INF: /' | tee -a common.log)
exec 2> >(sed -u 's/^/ERR: /' >> common.log)
echo "some txt"
echo "an error" >&2
echo "some more txt"
echo "one more error" >&2
导致屏幕挂起(必须按 Ctrl-C)并且日志仍处于缓冲状态。有什么建议吗?
【问题讨论】:
标签: bash redirect stdout stderr tee