mac的環境變數
檢視環境變數
輸入一下命令:
env
回車顯示如下
TMPDIR=/var/folders/15/x9lp8tvn1sv7hy79bv1mxr0r0000gn/T/ __CFBundleIdentifier=com.apple.Terminal XPC_FLAGS=0x0 TERM=xterm-256color SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.5tlbZA2P4S/Listeners XPC_SERVICE_NAME=0 TERM_PROGRAM=Apple_Terminal TERM_PROGRAM_VERSION=440 TERM_SESSION_ID=4184D918-D2C0-40EA-AF65-4A1F68A68396 SHELL=/bin/zsh HOME=/Users/dshvv LOGNAME=dshvv USER=dshvv PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin SHLVL=1 PWD=/Users/dshvv OLDPWD=/Users/dshvv LANG=zh_CN.UTF-8 _=/usr/bin/env
如果只看path,則輸入echo $PATH即可
echo $PATH
回車後會有如下
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
環境變數檔案優先順序
/etc/profile /etc/paths ~/.bash_profile ~/.bash_login ~/.profile ~/.bashrc
環境變數分類
全域性系統變數
/etc/profile
/etc/paths
是系統級別的,系統啟動就會載入,對每個使用者都生效。
每次修改需要重啟方可生效,否則只能source ~/.bashrc才會立刻生效哦
使用者系統變數
~/.bash_profile
~/.bash_login
~/.profile
是當前使用者級的環境變數
優先順序是從前往後的順序讀取,如有~/.bash_profile,則後幾個檔案就會被忽略不讀了,如不存在,才會以此類推讀取後面的檔案。
每個使用者都可使用該檔案輸入專用於自己使用的shell資訊,使用者進入系統,系統啟動就會載入,
和全域性系統變數一樣,該檔案也僅僅執行一次!
以上也是每次都需要重啟才生效,否則只能source ~/.bashrc才會立刻生效哦
終端特有環境變數
~/.bashrc
沒有上述規則,它是bash shell開啟的時候載入的。
為每一個執行bash shell的使用者執行此檔案.每次bash shell被開啟時,該檔案就會被讀取。
修改完畢,如果想立刻生效,則可執行下面的語句:source ~/.bashrc
否則只有新開的shell窗口才會生效
需要注意的是:
bash才會去載入/etc/bashrc。而zsh則會載入/etc/zshrc。
在mac系統中,在之前的終端是使用bash的。但是從 macOS Catalina 版開始,bash下崗了,被zsh這個更先進的終端系統所替代。
終端是zsh還是bash,其實是沒有啥區別的。其中的最大變數就是:配置檔案到底是.zprofile|.zshrc,還是.bash_profile|bashrc。
因為,在很多地方,都是在這裡載入環境變數的,如果zsh和bash切換了,那麼就意味著一些環境變數可能就失效了。
.zprofile 的作用與 .bash_profile 相同,並且在登入時執行(包括通過 SSH 執行)。
.zshrc的作用與 .bashrc 相同,並針對每個新的“終端”會話執行。
可以通過 echo $SHELL
我該用哪個
~/.bash_profile 或 ~/.zprofile
因為我看大家配置mysql、還是jdk等等,都是拿這個舉例子。猜測如下
如果使用全域性變數,則會汙染環境,影響比較大
如果使用終端特有的變數,則每次都要載入,浪費效能
所以使用了使用者的系統變數
使用者的系統變數中bash_login 需要登陸,才能繼續進行,顯然不方便
至於~/.profile 網上對比~/.bash_profile 對比的不多,推測可能是按照載入順序優先配置~/.bash_profile的緣故吧。