我正在尝试修改/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