Ich versuche, /etc/init.d/jenkins
das 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
type
ist ein integriertes Shell-Element, das in jedem in Ihrer $PATH
Variablen angegebenen Verzeichnis nach einer Datei sucht.
In Ihrem Beispiel wird nichts angezeigt, da sich java
in keinem der in Ihrem angegebenen Verzeichnisse eine Binärdatei befindet $PATH
.
Im Gegenteil, python
es wird gefunden, weil es sich tatsächlich in einem Ihrer $PATH
Verzeichnisse 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/java
da 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