2
我想要做以下;Bash - 重定向stdout登录和屏幕stderr只有日志
- 将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)和日志仍然缓冲。建议?
对于给定的命令是的,但我希望整个命名空间因此使用exec。我可以在{}或函数本身中封装特定的部分,并使用您的解决方案,但这并不理想。 – koola
鉴于没有更好的选择,我将此标记为答案。 – koola