重定向 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。基本上,我想记录标准输出+标准错误,同时仍然允许标准输出和标准错误被单独重定向和管道。tee 方法的问题在于它将它们聚集在一起。有没有办法在 bash/zsh 中做到这一点?