Linux添加路徑到PATH環境變量
一、PATH環境變量
PATH變量是Linux系統存儲可執行文件搜索路徑的地方,等價於Windows系統的Path變量,由於其他操作系統我沒用過,不清楚詳細情況,不作贅述。
類似於Windows系統的系統變量和用戶變量,Linux的環境變量也存在兩種類型:
- 系統啟動時加載的各個配置文件建立或修改的變量,例如/etc/profile以及在它末尾加載的/etc/profile.d文件夾內的所有sh文件。它們類似於Windows的系統變量,對所有用戶可見。
- 用戶登陸時加載的各個配置文件建立或修改的變量,例如用戶所使用的命令解釋器(shell)的配置文件。他們類似於WIndows的用戶變量僅對當前用戶可見。
由於Linux中的應用程序並非都是全局安裝,也有可能是為用戶單獨安裝的,所以PATH變量中的路徑有必要在不同時間添加。
二、添加方式
1. 直接使用export語句
例如:
#!/usr/bin/sh
# /etc/profile.d/jdk.sh
export PATH=$PATH:/usr/local/jvm/bin
或:
#~/.bashrc
......
export PATH=$PATH:~/.local/bin
......
這種方法最大的缺陷是容易出現重復添加的現象,尤其是寫在用戶shell的配置文件內的語句,在用戶重新加載shell配置文件時會重復插入。當然重新加載配置文件導致的重復基本上可以通過寫在僅登錄期加載的shell配置文件(如zshell的.zlogin)中解決。
2. 借助函數
在ArchLinux的/etc/profile文件中,我發現了一個神奇的函數,並將它寫在了我的.zshrc中:
appendpath()
{
case ":$PATH:" in
*:"$1":*)
;;
*)
PATH="${PATH:+$PATH:}$1"
esac
}
appendpath '~/.local/bin'
unset -f appendpath
export PATH
在向PATH變量添加路徑之前,會先使用case的匹配機制判斷待添加路徑是否已經存在與PATH變量中,以此確定是否添加,執行完成后,使用uset命令接觸函數名的占用。
這也是我目前使用的方法,可以完美的避免路徑重復的問題,雖然它的出處只是用來修改PATH,但像CLASSPATH這種列表型的環境變量也可以使用這種方法。