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

相關內容