【发布时间】:2017-03-08 19:17:08
【问题描述】:
我正在我的 cmd 提示符中尝试以下操作:
java>temp.txt
temp.txt 正在创建,其中没有任何内容。 “java”命令输出显示在控制台本身而不重定向到 temp.txt
但如果我执行以下操作:
目录> temp.txt
dir 命令的输出被重定向到临时文件。
为什么“java”命令的输出没有被重定向到文本文件??
【问题讨论】:
我正在我的 cmd 提示符中尝试以下操作:
java>temp.txt
temp.txt 正在创建,其中没有任何内容。 “java”命令输出显示在控制台本身而不重定向到 temp.txt
但如果我执行以下操作:
目录> temp.txt
dir 命令的输出被重定向到临时文件。
为什么“java”命令的输出没有被重定向到文本文件??
【问题讨论】:
> 用于将standard output(标准输出)发送到给定位置。但是使用java 命令打印的输出将出现在standard error (stderr) 输出中。
要重定向标准错误,您可以使用以下语法。这会将standard outputs 重定向到stdout.txt 和standard errors 到stderr.txt
java > stdout.txt 2> stderr.txt
或者,您可以使用以下命令将standard output 和standard error 发送到同一个文件(无需两次提及文件名)。
java > output.txt 2>&1
2> 表示重定向标准错误,&1 表示重定向到标准输出的位置,即output.txt。因此,此命令会将 stdout 重定向到 output.txt 并将 stderr 重定向到 stdout 被重定向的位置(即 output.txt 本身)。
您也可以忽略stderr,将其发送至/dev/null(仅限Linux)
java > out.txt 2> /dev/null
【讨论】:
因为当你不带参数运行java 时,输出会重定向到stderr 而不是stdout。所以你应该这样做:
java 2>temp.txt
2 告诉命令将stderr 重定向到文件temp.txt
【讨论】: