type -p java não funciona em um script init.d

type -p java não funciona em um script init.d

Estou tentando modificar /etc/init.d/jenkinso script para adicionar meu caminho Java personalizado. Minhas soluções são estas:

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

No entanto, quando inicio o serviço e examino os logs, vejo que a variável JAVAPATH está vazia. Por outro lado, se eu escrever, por exemplo:

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

Então a variável PATH incluirá o binário python perfeitamente.

Meu objetivo final é remover o nome do arquivo, apenas salvando dirname assim:

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

Nos meus scripts e testes personalizados, tudo funciona bem, então presumo que haja algo com java que não conheço. Estou executando um Debian 10 e meu caminho java é/usr/lib/jvm/jdk-11.0.9/bin/java

Desde já, obrigado.

Cumprimentos

Responder1

typeé um shell integrado que procura um arquivo em cada diretório especificado em sua $PATHvariável.

No seu exemplo, não está mostrando nada porque não há javabinário em nenhum dos diretórios especificados no seu arquivo $PATH.

Pelo contrário, pythonestá sendo encontrado porque está de fato em um de seus $PATHdiretórios (especificamente em /usr/bin).

Não sei qual método de instalação do Java você usou, mas você pode tentar usar, /etc/alternatives/javapois geralmente é configurado para apontar para o binário java padrão em seu sistema.

Outra opção não tão limpa é dpkg -L <java package name>listar todos os arquivos fornecidos pelo seu jdk e filtrá-los para encontrar o binário que deseja usar:

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

informação relacionada