Msys:如何将 STDERR 保留在屏幕上,同时将 STDOUT 和 STDERR 复制到文件
Msys: how to keep STDERR on the screen and at the same time copy both STDOUT and STDERR to files
我希望能够
- 在屏幕上显示 STDERR
- 在文件中复制 STDOUT 和 STDERR(如果可能,在同一个文件中)
有关信息,我正在使用 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)"
我希望能够
- 在屏幕上显示 STDERR
- 在文件中复制 STDOUT 和 STDERR(如果可能,在同一个文件中)
有关信息,我正在使用 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)"