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.

Моя конечная цель — удалить имя файла, просто сохранив dirname:

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 по умолчанию в вашей системе.

Другой не очень понятный вариант — это использование 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

Связанный контент