5

我有一个 bat 脚本,它在某一时刻将进程的 stderr 重定向到 stdout,然后将其写入文件。我曾经这样做过:

process.exe 2>&1 > file.txt

但是,这不会将 stderr 重定向到文件(出于我无法理解的原因)。当我将行修改为:

process.exe > file.txt 2>&1 

整件事奏效了。这两个不是等价的吗?

4

3 回答 3

8

第一个例子本质上是:

stderr = stdout;
stdout = "file.txt";

所以,stderr还是指着原来的stdout。你的第二个例子是:

stdout = "file.txt";
stderr = stdout;

因此,两者stderrstdout现在都参考file.txt. 这是令人讨厌的微妙。

于 2010-02-04T08:27:53.387 回答
2

重定向2>&1在命令行末尾起作用。它不能作为第一个重定向参数,重定向需要一个文件名和2>&1结尾。您实际上是在尝试重定向 stderr,但没有占位符来存储 stderr 消息,因此它失败了。记住这一点的捷径是

可执行文件 > some_file 2>&1

希望这会有所帮助,最好的问候,汤姆。

于 2010-02-04T08:27:57.740 回答
1

顺便说一句,由于我不完全理解的原因,想像

process.exe > result.txt 2<&1 

似乎也有效

于 2012-06-15T10:11:04.923 回答