如何仅重定向stderr?


13

我这样做有点麻烦。我需要运行已编译的.java文件,并且仅将stderr重定向到名为error的文件。因此.java文件名为javaProgram.java。

这是我尝试过的:

java javaProgram 2> error

但是当我

cat error

似乎里面有东西,即使我知道特定的.java文件没有错误的事实。难道我做错了什么?我只想显示该错误文件,而不是其他任何错误。

Answers:


16

您的第一次尝试是正确的;2>filename这就是您重定向stderr的方式。可能是您的程序正在向stderr写入一些非错误消息,或者Java程序正在运行其他输出到stderr的程序。


1

简单的答案是不可能的。标准错误用于编写诊断输出,由应用程序定义什么是诊断/错误输出。那是根据POSIX标准


2
如果您要引用POSIX规范,请引用特定部分而不是整个文档。它超大。
jordanm

由于什么时候无法将stderr重定向到POSIX中的文件?您必须为此提供实际报价。
l0b0

1
@ l0b0不是Jeight在说什么。由应用程序决定什么去往STDOUT和什么去往STDERR。例如,完全有可能将所有内容推送到STDOUT中,然后重定向STDERR将无效。或者,在这种情况下,可以(和标准做法)将并非严格错误的某些内容放入STDERR。解析其他诊断程序中的错误的唯一方法是将错误标记为“ ERROR:”或其他标记。可能会有一个冗长的开关可能会有所帮助,但这是特定于程序的。
evilsoup

OP提出了两个语义上不同的问题:“仅将stderr重定向到名为error的文件”和“我希望此错误文件显示的是错误,而不是其他任何内容”。我的观点当然不是不可能的第一部分。
l0b0 2013年

@ l0b0您已经倒退了。OP绝对可以将stderr重定向到名为error的文件。他无法选择Java作为stderr输出的内容,因为stderr的内容由应用程序而不是用户控制。他可以做的是grep stderr传递到的文件,以获取实际的错误消息。
高度
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.