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



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

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

我使用了另一篇文章中的信息,最后一次重定向是>> file.log而不是2>> file.log,但是如果我这样做,那么我会在控制台上获得 stderr(还添加了前缀(和文件中的 stdout。

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

20170729100156 - JOB: script.sh
This goes to stderr

我只得到:

This goes to stderr

任何人都可以推荐解决方案,或者为什么会发生这种情况?谢谢。

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

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

相关内容

  • 没有找到相关文章

最新更新