Msys:如何将 STDERR 保留在屏幕上,同时将 STDOUT 和 STDERR 复制到文件

Msys: how to keep STDERR on the screen and at the same time copy both STDOUT and STDERR to files

我希望能够

有关信息,我正在使用 Msys 来执行此操作。

.

在对 SO 做了一些研究之后,我尝试使用类似

的东西

<my command> > >(tee stdout.log) 2> >(tee stderr.log)

Bu 我收到以下错误:

sh: syntax error near unexpected token `>'

.

知道怎么做吗?

我有一个生成 STDOUT 和 STDERR 的简单脚本 (test.sh):

#!/bin/bash
echo hello
rm something 
exit

然后,执行以下操作:

./test.sh > stdout.log 2> >(tee stderr.log >&2)

您将在屏幕上看到 STDERR,以及两个带有 STDERR 和 STDOUT 的独立日志文件。我使用了给定 here

的部分答案

请注意,我假设您在当前目录中没有名为 something 的文件:)

如果您希望 STDOUT 和 STDERR 转到同一个文件,请在 tee 上使用 -a 选项:

./test.sh > std.log 2> >(tee -a std.log >&2)

在 Msys 中可能没有直接的解决方案,但 >(tee ... ) 解决方案在 *Nix、OSX 和可能的 Cygwin 中工作正常。

解决方法是 grep 我们希望将它们保留在屏幕上的所有错误和警告。

我已经成功地使用以下命令为 makefile 编译 C 代码:

make 2>&1 | tee make.log | grep -E "(([Ee]rror|warning|make):|In function|undefined)"