在脚本中重定向stderr并添加前缀

时间:2017-07-29 20:21:37

标签: linux bash redirect sed

我正在尝试将stderr输出重定向到bash脚本中的文件,并且对于写入的每个错误输出,我想添加包含当前脚本名称和时间戳的前缀。这就是我这样做的方式:

exec 2> >(sed "s/^/\n$(date +'%Y%m%d%H%M%S') - JOB: $(basename $BASH_SOURCE)\n\n/" >&2) 2>> file.log
echo This goes to stderr >&2

我使用了来自this其他帖子的信息,最后一次重定向是>> file.log而不是2>> file.log,但是如果我这样做,那么我就得到了stderr控制台(也添加了前缀)和文件中的标准输出。

这就是我在2中添加2>> file.log的原因,因为sed替换也输出到stderr,所以这样重定向工作正常,但是没有添加前缀。所以不要得到:

20170729100156 - JOB: script.sh

This goes to stderr

我只得到:

This goes to stderr

任何人都可以推荐一个解决方案,或者为什么会这样?感谢。

1 个答案:

答案 0 :(得分:1)

为什么不直接将sed的输出直接重定向到日志文件?

exec 2> >(sed "s/^/\n$(date +'%Y%m%d%H%M%S') - JOB: $(basename $BASH_SOURCE)\n\n/" >> file.log)
echo This goes to stderr >&2