type -p java は init.d スクリプトでは機能しません

type -p java は init.d スクリプトでは機能しません

/etc/init.d/jenkinsカスタム Java パスを追加するためにスクリプトを変更しようとしています。私の解決策は次のとおりです:

JAVAPATH=$(type -p java) 
PATH=/bin:/usr/bin:/sbin:/usr/sbin:$JAVAPATH

しかし、サービスを起動してログを見ると、JAVAPATH 変数が空であることがわかります。一方、たとえば次のように記述すると、

PYPATH=$(type -p python) 
PATH=/bin:/usr/bin:/sbin:/usr/sbin:$PYPATH

すると、PATH 変数に Python バイナリが完全に含まれるようになります。

私の最終目標はファイル名を削除し、ディレクトリ名のみを保存することです。

JAVAPATH=$(type -p java | xargs dirname)

私のカスタムスクリプトとテストでは、すべて正常に動作しているので、Javaに私が知らない何かがあると思います。私はDebian 10を実行しており、Javaパスは次のとおりです。/usr/lib/jvm/jdk-11.0.9/bin/java

前もって感謝します。

よろしく

答え1

type変数で指定されたすべてのディレクトリ内のファイルを検索するシェル組み込み関数です$PATH

javaあなたの例では、 で指定されたどのディレクトリにもバイナリがないため、何も表示されません$PATH

それどころか、は、実際にいずれかのディレクトリ (具体的には)pythonにあるため、見つかります。$PATH/usr/bin

どのような Java インストール方法を使用したかはわかりませんが、/etc/alternatives/java通常はシステムのデフォルトの Java バイナリを指すように構成されているため、それを使用してみることができます。

もう 1 つのあまりきれいではないオプションは、dpkg -L <java package name>jdk によって提供されるすべてのファイルを一覧表示し、それらをフィルターして、使用するバイナリを見つけることです。

$ JAVA_PATH=$(dpkg -L openjdk-11-jre-headless|fgrep bin/java)
$ echo $JAVA_PATH
/usr/lib/jvm/java-11-openjdk-amd64/bin/java

関連情報