Ubuntu

使用 sudo 或直接以超級使用者身份執行命令之間的不同行為 - PATH 相同

  • May 22, 2019

我正在嘗試在 xubuntu 上安裝 eclipse,我安裝了 java sudo gdebi <java-package>.deb,我將它添加/etc/environment到兩者PATH和“JAVA_HOME”然後重新載入環境並重新啟動整個系統。

執行java --version我得到了正確的輸出

java 12.0.1 2019-04-16
Java(TM) SE Runtime Environment (build 12.0.1+12)
Java HotSpot(TM) 64-Bit Server VM (build 12.0.1+12, mixed mode, sharing)

兩者都由超級使用者呼叫

$ sudo su
# java --version

或通過

$ java --version

但執行

$ sudo java --version

我有java: command not found

但執行

sudo echo $PATH 

我有

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/jvm/jdk-12.0.1/bin/:/snap/bin/

並且存在 java 的路徑:/usr/lib/jvm/jdk-12.0.1/bin/

我該如何解決?也有人可以解釋我為什麼會這樣嗎?

這看起來像 PATH 被 sudo 覆蓋。

您應該檢查是否/etc/sudoers包含secure_path=...設置並將您的 java 路徑廣告到此。


小心簡單的測試。要確認您的路徑,您應該:

sudo bash -c 'echo $PATH'

更簡單的形式sudo echo $PATH不起作用,因為在呼叫PATH之前展開。sudo

引用自:https://unix.stackexchange.com/questions/520353