我有一个bat脚本,它一度将进程的stderr重定向到stdout,然后将其写入文件。我曾经这样做过:
process.exe 2>&1 > file.txt
但是,这并没有将stderr重定向到文件(出于我无法理解的原因)。当我将该行修改为:
process.exe > file.txt 2>&1
整件事情奏效了。这两个不等同吗?
答案 0 :(得分:8)
第一个例子基本上是:
stderr = stdout;
stdout = "file.txt";
因此,stderr
仍然指向原始的stdout
。你的第二个例子是:
stdout = "file.txt";
stderr = stdout;
因此,stderr
和stdout
现在都引用了file.txt
。这令人讨厌地微妙。
答案 1 :(得分:2)
重定向2>&1
在命令行的末尾起作用。它不能作为第一个重定向参数,重定向需要文件名,最后需要2>&1
。您正在尝试重定向stderr,但没有占位符来存储stderr消息,因此失败了。记住这个的快捷方式是
executable > some_file 2>&1
希望这有帮助, 最好的祝福, 汤姆。
答案 2 :(得分:1)
顺便说一句,由于我不完全理解的原因,想像
process.exe > result.txt 2<&1
似乎也有效