确定STDERR是否要转到终端

Bra*_*ace 5 java linux command-line-interface stderr io-redirection

我有一套Java程序,在我们的Linux服务器上用作命令行工具.他们中的大多数都使用在STDERR上打印进度条的类,类似于Perl Term::ProgressBar.

我想在STDERR进入终端时显示进度条,并在重定向STDERR时自动禁用自身,以便重定向数据中没有所有类型的进度条.

检查System.console() == null是我的第一个想法,但重定向STDOUT就足以实现这一点true,即使STDERR仍在进入终端.有什么我可以检查特定于STDERR的东西吗?特定于Linux或使用本机API的解决方案可以满足我的需求.

chr*_*ke- 1

我想你要找的是isatty(3), 在unistd.h. 没有办法判断文件句柄是否已被重定向,但这会告诉您它是否仍然是交互式的。请参阅 GNU coreutils 中命令的源代码tty