昨天把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命令了
总的来讲,遇到问题,不要想固然,应该首先检查全部的前置条件,这样才能够尽可能避免无用功!!!