Typ -p Java funktioniert nicht in einem init.d-Skript

Typ -p Java funktioniert nicht in einem init.d-Skript

Ich versuche, /etc/init.d/jenkinsdas Skript zu ändern, um meinen benutzerdefinierten Java-Pfad hinzuzufügen. Meine Lösung ist folgende:

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

Wenn ich jedoch den Dienst starte und in die Protokolle schaue, sehe ich, dass die Variable JAVAPATH leer ist. Wenn ich dagegen beispielsweise schreibe:

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

Dann wird die PATH-Variable die Python-Binärdatei perfekt enthalten.

Mein endgültiges Ziel ist das Entfernen des Dateinamens und das Speichern des Verzeichnisnamens:

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

Bei meinen benutzerdefinierten Skripten und Tests funktioniert alles einwandfrei, daher gehe ich davon aus, dass es etwas mit Java gibt, das ich nicht kenne. Ich verwende Debian 10 und mein Java-Pfad lautet/usr/lib/jvm/jdk-11.0.9/bin/java

Dank im Voraus.

Grüße

Antwort1

typeist ein integriertes Shell-Element, das in jedem in Ihrer $PATHVariablen angegebenen Verzeichnis nach einer Datei sucht.

In Ihrem Beispiel wird nichts angezeigt, da sich javain keinem der in Ihrem angegebenen Verzeichnisse eine Binärdatei befindet $PATH.

Im Gegenteil, pythones wird gefunden, weil es sich tatsächlich in einem Ihrer $PATHVerzeichnisse befindet (und zwar in /usr/bin).

Ich weiß nicht, welche Installationsmethode für Java Sie verwendet haben, aber Sie könnten versuchen, sie zu verwenden, /etc/alternatives/javada sie normalerweise so konfiguriert ist, dass sie auf die Standard-Java-Binärdatei in Ihrem System verweist.

Eine weitere, nicht ganz so saubere Möglichkeit besteht darin, dpkg -L <java package name>alle von Ihrem JDK bereitgestellten Dateien aufzulisten und sie zu filtern, um die Binärdatei zu finden, die Sie verwenden möchten:

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

verwandte Informationen