1. 程式人生 > 其它 >mac的環境變數

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

來檢視當前的shell型別

我該用哪個

~/.bash_profile 或 ~/.zprofile
因為我看大家配置mysql、還是jdk等等,都是拿這個舉例子。猜測如下
如果使用全域性變數,則會汙染環境,影響比較大
如果使用終端特有的變數,則每次都要載入,浪費效能
所以使用了使用者的系統變數
使用者的系統變數中bash_login 需要登陸,才能繼續進行,顯然不方便
至於~/.profile 網上對比~/.bash_profile 對比的不多,推測可能是按照載入順序優先配置~/.bash_profile的緣故吧。