我正在从 bash 终端运行 java 程序OS X 10.8
,并尝试重定向它产生的输出。
但是,当通过管道运行它或将其重定向到文件时,输出为空,但我在终端中看到输出。
为了说明这一点:
> java program.java
13/10/02 14:18:30 WARN some
13/10/02 14:18:30 INFO log
13/10/02 14:18:30 INFO messages
...
> java program.java > log
> cat log
>
java 程序是否可以设置为写入另一个流stdout
,但仍会在终端中产生输出。这样的事可能吗?
答案1
有三为每个程序打开标准文件stdin
(标准输入)、stdout
(标准输出)和stderr
(标准错误)。默认情况下,写入两者stdout
并stderr
在终端中输出。
stderr
将错误和日志消息写入而不是stdout
为了不将日志或错误消息与实际程序输出混合是一种常见的约定。您可以stderr
使用重定向2>
,例如:
command 2> log