禁止显示“已提取_JAVA_OPTIONS”消息


13

我正在使用_JAVA_OPTIONS为RHEL上的Java设置一些默认值。它工作正常,但是现在每次我启动java时,都会收到以下消息

 Picked up _JAVA_OPTIONS: -foo -bar -baz

是否可以保留这些选项但不显示此消息。

Answers:


11

Java通常被称为带有绝对路径,例如/usr/bin/java,这使得该答案在某些情况下无用,而在其他情况下则需要更多才能使它起作用。

我找到的解决方案需要编写一个包装器外壳脚本,该脚本通过过滤器重定向STDERR,以删除违规行。它必须被放置在$PATH了Java二进制之前它包装与普通的调用javawhich java或类似(或您的工具必须被配置为使用它)

它依靠bash的能力来创建带有括号的子shell (command),并将java的STDERR重定向到其STDIN command1 2> >(command2)。最后,子Shell中的进程需要再次将其过滤后的输入重定向到STDOUT,以便Java程序仍可以使用STDERR。

#!/bin/bash
/usr/bin/java "$@" 2> >(grep -v "^Picked up _JAVA_OPTIONS:" >&2)

可能是很糟糕的做法,但这是针对docker映像的,我在此期间已经厌倦了所有的红色docker build-但我将其重命名${JAVA_HOME}/bin/javajava2,并将该脚本的修改后的版本放在其中java(带有chmod +x)。像魅力一样工作!
BrainSlugs83 '19

2

或者,您可以将其放入外壳启动/配置文件中:

_SILENT_JAVA_OPTIONS="$_JAVA_OPTIONS"
unset _JAVA_OPTIONS
alias java='java "$_SILENT_JAVA_OPTIONS"'

仅在java ...通过命令行直接调用时有效。通过脚本或其他父进程进行的所有Java调用均不会受到影响
飞羊

好了,您可以将/ bin / java更改为一个外壳脚本,如果您确实愿意,它可以执行相同的操作。
spelufo

即使您不这样做,它也会取消设置选项,因此其他命令也会受到影响。它不会通过不传递任何选项来使它们静音:)。
spelufo
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.