我有一个 bat 脚本,它在某一时刻将进程的 stderr 重定向到 stdout,然后将其写入文件。我曾经这样做过:
process.exe 2>&1 > file.txt
但是,这不会将 stderr 重定向到文件(出于我无法理解的原因)。当我将行修改为:
process.exe > file.txt 2>&1
整件事奏效了。这两个不是等价的吗?
我有一个 bat 脚本,它在某一时刻将进程的 stderr 重定向到 stdout,然后将其写入文件。我曾经这样做过:
process.exe 2>&1 > file.txt
但是,这不会将 stderr 重定向到文件(出于我无法理解的原因)。当我将行修改为:
process.exe > file.txt 2>&1
整件事奏效了。这两个不是等价的吗?
第一个例子本质上是:
stderr = stdout;
stdout = "file.txt";
所以,stderr
还是指着原来的stdout
。你的第二个例子是:
stdout = "file.txt";
stderr = stdout;
因此,两者stderr
和stdout
现在都参考file.txt
. 这是令人讨厌的微妙。
重定向2>&1
在命令行末尾起作用。它不能作为第一个重定向参数,重定向需要一个文件名和2>&1
结尾。您实际上是在尝试重定向 stderr,但没有占位符来存储 stderr 消息,因此它失败了。记住这一点的捷径是
可执行文件 > some_file 2>&1
希望这会有所帮助,最好的问候,汤姆。
顺便说一句,由于我不完全理解的原因,想像
process.exe > result.txt 2<&1
似乎也有效