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

标签 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>> 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)\n\n/" >> file.log)
echo This goes to stderr >&2

关于linux - 在脚本中重定向 stderr 并添加前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45393690/

相关文章:

linux - 变量作为 bash 数组索引?

linux - 你会为什么编写内核模块?

linux - Bash - 按列加入(合并)文件

linux - 输入 spark-shell 时找不到 spark submit

mysql - 执行mysql查询后捕获退出代码

css - 如何使用shell脚本分别计算所有css、js和html页面的总大小?

javascript - jQuery/JS 不会在验证表单后重定向

javascript - 以下语法有什么问题: Its not working

javascript - 默认为文件夹中的任何 html 文件

linux - Perl DateTime::Locale::en 错误