作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
重定向 stdout+stderr 使得两者都被写入文件,同时仍然输出到 stdout 非常简单:
cmd 2>&1 | tee output_file
但是现在来自 cmd 的 stdout/stderr 都出现在 stdout 上。我想将 stdout+stderr 写入同一个文件(假设 cmd 是单线程的,因此保留顺序)但仍然能够单独重定向它们,如下所示:
some_magic_tee_variant combined_output cmd > >(command-expecting-stdout) 2> >(command-expecting-stderr)
因此 combined_output 包含保留顺序的两者,但 command-expecting-stdout 仅获取 stdout 而 command-expecting-stderr 仅获取 stderr。基本上,我想记录 stdout+stderr,同时仍然允许 stdout 和 stderr 被单独重定向和管道传输。 T 型方法的问题在于它将它们组合在一起。有没有办法在 bash/zsh 中做到这一点?
最佳答案
据我所知,这就是您要找的东西。首先,我制作了一个小脚本来写入 stdout 和 stderr。它看起来像这样:
$ cat foo.sh
#!/bin/bash
echo foo 1>&2
echo bar
然后我这样运行它:
$ ./foo.sh 2> >(tee stderr | tee -a combined) 1> >(tee stdout | tee -a combined)
foo
bar
我的 bash
中的结果如下所示:
$ cat stderr
foo
$ cat stdout
bar
$ cat combined
foo
bar
请注意,-a 标志是必需的,这样 tee
就不会覆盖其他 tee
的内容。
关于bash - 如何在保持流分离的同时将 stdout+stderr 重定向到一个文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12517519/
我是一名优秀的程序员,十分优秀!