gpt4 book ai didi

bash - 如何在保持流分离的同时将 stdout+stderr 重定向到一个文件?

转载 作者:行者123 更新时间:2023-11-29 08:47:48 26 4
gpt4 key购买 nike

重定向 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com