回答:
Javaはのような絶対パスで呼び出されることがよく/usr/bin/java
あります。これにより、この答えが役に立たない場合があり、他の環境で動作させるためにはさらに多くのことが必要になります。
私が見つけたソリューションでは、問題のある行を削除するフィルターを介してSTDERRをリダイレクトするラッパーシェルスクリプトを記述する必要があります。$PATH
Javaバイナリがラップする前に配置し、plain java
、which java
または同様のもので呼び出す必要があります(または、使用するようにツールを構成する必要があります)
括弧付きのサブシェルを作成し、(command)
javaのSTDERRをSTDINにリダイレクトするのは、bashの機能に依存していますcommand1 2> >(command2)
。最後に、サブシェルのプロセスは、フィルタリングされた入力を再度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
(withchmod +x
)としてそこに入れました。魅力のように働いた!