java - System.err 的意义何在?

标签 java bash unix stderr

在 UNIX 中,我应该编写一个 Java 文件,它将“EXIT 1”打印到标准错误,然后以状态 1 退出。

这是我的方法..

System.err.println("EXIT 1");
System.exit(1);

这是我应该做的吗?

如果是这样,我应该如何在 Unix shell 中使用它?当我在 bash 中编译并运行它时,它只打印“EXIT 1”(所以它与 System.out.println 做同样的事情,我为什么要使用“err”?)。这里的“标准错误”是什么?

最佳答案

每个正在运行的程序都有这三个流:

  • 标准输入 (stdin),通常来自键盘。公开为 System.in
  • 标准输出 (stdout),通常进入控制台。暴露为 System.out
  • 标准错误 (stderr),通常也会发送到控制台。公开为 System.err

你的程序是正确的——它确实打印到标准错误。但在正常情况下,stderr 流与 stdout 流一样进入控制台,因此在视觉上无法区分。

但是,您应该使用 stderr 而不是 stdout 来获取错误消息的原因是重定向。这意味着您将 stderr 发送到文件而不是控制台。同时,stdout 不会受到影响,因为这两个流是独立的。

例如,您可以在 bash、cmd、PowerShell 等中执行此操作:

$ java Program 2> errors.txt

现在,所有带有 System.err.println() 的输出都将在 errors.txt 中结束,而 System.out.println() code> 仍将显示在屏幕上。这有助于调试。

关于java - System.err 的意义何在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21197737/

相关文章:

java - 如何使用多线程将多个文本文件读入一个列表?

bash - 在 bash 中,如何重新建立 sftp 连接并在使 nautilus 执行此操作的脚本中运行它?

linux - rsync 无法将文件从服务器 A 同步到服务器 B。服务器 B 正在运行 rsync 守护进程

linux - 如何在 UNIX 中将文本文件转换为小写(但在 UTF-8 中)

c - fgets 打印出 'à' 而不是实际输入

java - Java 中的域事件模式实现?

java - 如何使用 XMLStreamReader 读取 xml 中的 namespace ?

Java MVC - 感觉我不明白

bash - 如何执行solr zookeeper CLI上传solr配置

bash - 使用 Bash 迭代目录中的文件