昨天把MBP格式化,重裝了最新的MacOS Catalina系統,衆所周知,Mac下的Terminal並無默認配置ll
這樣好用的命令,出於Linux下習慣,就想直接配置下,而後,就遇到了很坑的問題,配置文件死活不生效,每次打開命令行後,都須要source
下才能夠,真的要人命,具體問題,且聽我細細道來~mysql
在MacOS Catalina以前,MacOS一般使用Bash做爲默認shell。sql
# Terminal默認Shell爲Bash時,Mac系統的環境變量加載順序爲: # 系統級別的環境變量配置 /etc/profile => /etc/paths # 用戶級別的環境變量配置 ~/.bash_profile => ~/.bash_login => ~/.profile # Bash Shell自己的配置 ~/.bashrc
其中,/etc/profile
和/etc/paths
都是系統級別的環境變量配置,系統啓動時就會加載,後面三個都是用戶級別的配置,這三個用戶級別的配置是按從前日後的順序讀區的,若是~/.bash_profile
文件存在,則後面的兩個文件就不會再讀取了;若是~/.bash_profile
文件不存在,纔會按照相同的規則讀區後面的兩個文件;最後配置文件~/.bashrc
則是在Bash Shell
打開時自動載入的,並不遵循前面三個用戶配置文件的讀取規則。shell
環境變量PATH
的設置語法:macos
# 使用冒號做爲分隔符 export PATH=$PATH:<PATH 1>:<PATH 2>:<PATH 3>:------:<PATH N>
MacOS的全局環境變量配置大體有四種方式,須要注意的是,這些文件一般涉及到系統級別環境變量,修改時通常須要root
權限。bash
/etc/paths
文件中存放的是一行行路徑信息,只須要在該文件中添加某個目錄的路徑便可配置爲全局變量。tcp
/etc/profile
文件是全局配置,無論哪一個用戶登錄,都會讀取該文件,一般不建議直接修改該文件。命令行
/etc/bashrc
文件是Bash Shell
的全局公有配置文件,一般在該文件中添加系統級環境變量,在Bash Shell
執行時,無論以任何方式執行,都會讀取該文件。code
一般狀況下,不推薦直接對上面三個文件直接修改,緣由在於,系統每安裝一個軟件,一般都須要爲該軟件配置相應的全局環境變量,若是一直對上面三個文件追加和修改的話,耦合性都過高了,上述三個文件會愈來愈複雜。terminal
爲了便於軟件的管理,一般使用下面的方式進行全局環境變量的配置:zsh
# 在/etc/paths.d目錄下建立軟件對應文件(這裏以mysql爲例) sudo touch /etc/paths.d/mysql # 利用vi編輯/etc/paths.d/mysql文件 sudo vi /etc/paths.d/mysql # 編輯該文件,鍵入路徑並保存 /usr/local/mysql/bin # 最後,從新打開Terminal,就可使用/usr/local/mysql/bin目錄下的mysql命令了
注意:Bash Shell
在以login
方式執行時纔會讀取該文件(MacOS下,默認以login方式執行),該文件僅僅執行一次,爲了使用方便,一般在該文件中設置一些環境變量,例如,設置別名,alias ll='ls -la'
;設置環境變量,export PATH=/opt/local/bin:/opt/local/sbin:$PATH
。
注意:Linux系統下一般爲~/.bashrc
文件,而Mac下爲~/.bash_profile
文件。
繞了一大圈,到如今,我尚未說清楚本身遇到的問題,就是,在安裝徹底新的MacOS Catalina
系統後,打開終端以後,習慣性地敲下ll
命令,很尷尬,Command Not Found
,緣由在於,MacOS默認時沒有提供ll
命令的,一般須要本身在環境變量中配置alias ll='ls -lF'
。
在MacOS Catalina
系統以前,根據前面的內容,徹底能夠搞定,可是,MacOS Catalina
系統上,若是用戶直接在~/.bashrc
中進行配置,並不會生效的,緣由就在於,MacOS Catalina
系統默認的Bash修改成Zsh了。
在MacOS Catalina以前,Terminal默認的Shell類型爲Bash,其默認使用的Bash 3.2是基於GPLv2協議的,可是,最新版的Bash已經轉向GPLv3協議,而GPLv3協議對大公司有着更嚴格的限制,這頗有多是Apple再也不將Bash做爲默認Shell,而是轉向Zsh的緣由之一。
Zsh
的用戶環境變量配置文件路徑爲~/.zshrc
,也就是說,咱們須要將alias ll='ls -al'
等環境變量配置在該文件中才會生效。
# 查看當前系統的Shell類型 echo $SHELL /bin/zsh # 新建~/.zshrc文件並追加爲ll等關聯命令 alias ll='ls -lF' alias la='ls -A' alias l='ls -CF' # 而後就能夠愉快的使用ll命令了
總的來講,遇到問題,不要想固然,應該首先檢查全部的前置條件,這樣才能夠儘可能避免無用功!!!