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)

В моих сценариях и тестах custum все работает нормально, поэтому я предполагаю, что в java есть что-то, чего я не знаю. Я использую Debian 10, и мой путь к Java - /usr/lib/jvm/jdk-11.0.9/bin/java

Заранее спасибо.

С уважением

0
задан 5 December 2020 в 02:58
1 ответ

type — это встроенная оболочка, которая ищет файл в каждом каталоге, указанном в вашей переменной $PATH.

В вашем примере это ничего не показывает, потому что нет двоичного файла java ни в одном из каталогов, указанных в вашем $PATH.

Напротив, python обнаруживается, потому что он действительно находится в одном из ваших каталогов $PATH (в частности, в /usr/bin).

Я не знаю, какой метод установки Java вы использовали, но вы можете попробовать использовать /etc/alternatives/java, так как обычно он указывает на двоичный файл Java по умолчанию в вашем система.

Еще один не очень чистый вариант — использовать dpkg -L <имя пакета java>, чтобы получить список всех файлов, предоставленных вашим jdk, и отфильтровать их, чтобы найти двоичный файл, который вы хотите использовать:

$ JAVA_PATH=$(dpkg -L openjdk-11-jre-headless|fgrep bin/java)
$ echo $JAVA_PATH
/usr/lib/jvm/java-11-openjdk-amd64/bin/java
0
ответ дан 5 December 2020 в 01:47

Теги

Похожие вопросы