Answers:
Java通常被称为带有绝对路径,例如/usr/bin/java
,这使得该答案在某些情况下无用,而在其他情况下则需要更多才能使它起作用。
我找到的解决方案需要编写一个包装器外壳脚本,该脚本通过过滤器重定向STDERR,以删除违规行。它必须被放置在$PATH
了Java二进制之前它包装与普通的调用java
,which 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)
或者,您可以将其放入外壳启动/配置文件中:
_SILENT_JAVA_OPTIONS="$_JAVA_OPTIONS"
unset _JAVA_OPTIONS
alias java='java "$_SILENT_JAVA_OPTIONS"'
java ...
通过命令行直接调用时有效。通过脚本或其他父进程进行的所有Java调用均不会受到影响
docker build
-但我将其重命名${JAVA_HOME}/bin/java
为java2
,并将该脚本的修改后的版本放在其中java
(带有chmod +x
)。像魅力一样工作!