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 二进制文件。

我的最终目标是删除文件名,只保存目录名,因此:

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

在我的自定义脚本和测试中,一切都运行正常,所以我假设 Java 中存在一些我不知道的问题。我正在运行 Debian 10,我的 Java 路径是/usr/lib/jvm/jdk-11.0.9/bin/java

提前致谢。

问候

答案1

type是一个 shell 内置命令,它在变量中指定的每个目录中查找文件$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

相关内容