Ubuntu
使用 sudo 或直接以超級使用者身份執行命令之間的不同行為 - PATH 相同
我正在嘗試在 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