Debian

type -p java 在 init.d 腳本中不起作用

  • December 5, 2020

我正在嘗試修改/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

提前致謝。

問候

type``$PATH是一個內置的 shell,它在變數中指定的每個目錄中查找文件。

在您的範例中,它沒有顯示任何內容,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

引用自:https://serverfault.com/questions/1045058