将标准输出和标准错误重定向到一个文件,同时仍将其输出到标准输出是很简单的:
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 包含了两者的内容,并且保留了顺序,但是期望命令输出stdout 的命令只会得到stdout,期望命令输出stderr 的命令只会得到stderr。基本上,我想记录stdout+stderr,同时允许分别重定向和管道stdout和stderr。 tee 方法的问题在于它将它们聚合在一起。有没有办法在 bash/zsh 中实现这一点?
/dev/tty17
,然后运行命令。这并不是说shell必须轮询命令的输出并将该输出转发到TTY。 - ruakh