将 stdout 和 stderr 重定向到带有前缀的单个文件

发布于 2024-08-24 21:09:29 字数 176 浏览 7 评论 0原文

我正在编写一个 bash 脚本,需要将我运行的命令的 stdoutstderr 输出重定向到单个文件,并在每行前面加上 stderr 前缀> 或 stdout,相应地。

有没有一个简单的方法可以做到这一点?

I am writing a bash script and need to redirect the stdout and stderr output of a command i run to a single file, prefixing each line with stderr or stdout, accordingly.

is there a simple way to do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

┼── 2024-08-31 21:09:29

注释输出,来自 Debiandevscripts,就是这样做的。

其手册页中的示例:

$ annotate-output make
21:41:21 I: Started make
21:41:21 O: gcc -Wall program.c
21:43:18 E: program.c: Couldn't compile, and took me ages to find out
21:43:19 E: collect2: ld returned 1 exit status
21:43:19 E: make: *** [all] Error 1
21:43:19 I: Finished with exitcode 2

annotate-output, from Debian's devscripts, does this.

The example in its man page:

$ annotate-output make
21:41:21 I: Started make
21:41:21 O: gcc -Wall program.c
21:43:18 E: program.c: Couldn't compile, and took me ages to find out
21:43:19 E: collect2: ld returned 1 exit status
21:43:19 E: make: *** [all] Error 1
21:43:19 I: Finished with exitcode 2
北城挽邺 2024-08-31 21:09:29

试试这个:

(myCommand | sed s/^/stdout:/ >> myLogfile) 2>&1 | sed s/^/stderr:/ >> myLogFile

第一个管道将 stdout: 前缀插入到 myCommand 的标准输出中,并将其附加到 myLogFile 中。

括号用于对所有这些内容发出一个命令。他们告诉我们,进一步的重定向适用于括号内的内容,而不仅仅适用于 sed。

然后使用 2>&1 将标准错误重定向到标准输出(请记住,原始标准输出已经重定向到 myLogFile)。第二个管道向其插入 stderr: 前缀并将其附加到 myLogFile 中。

Try this:

(myCommand | sed s/^/stdout:/ >> myLogfile) 2>&1 | sed s/^/stderr:/ >> myLogFile

The first pipe inserts a stdout: prefix to the standard output of myCommand and appends it to myLogFile.

The parenthesis are used to make a single command of all of that. They tell that further redirections apply to what is inside parenthesis and not to sed only.

Then standard error is redirected to standard output with 2>&1 (remember that original standard output has already been redirected to a myLogFile). Second pipe inserts a stderr: prefix to it and appends it to myLogFile.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文