将stdout重定向到文件,并将tee stderr重定向到同一文件 如果您不需要完美的订购如果您需要完美的订购

问题描述

我正在运行一个命令(很有可能)将文本输出到stderr和stdout。我想将stderr和stdout都保存到同一文件,但是我只想将stderr打印到终端。

我该如何使用它?我已经尝试过mycommand 1>&2 | tee file.txt >/dev/null,但不会在终端上显示任何内容

解决方法

如果您不需要完美的订购

使用tee的两个单独副本,都以追加模式写入同一文件,但是只有其中一个随后将内容转发到/dev/null时,您将获得所需的位置:

mycommand \
  2> >(tee -a file.txt >&2) \
   > >(tee -a file.txt >/dev/null)

如果您需要完美的订购

请参见Separately redirecting and recombining stderr/stdout without losing ordering