MacOS Catalina之Terminal配置
MacOS Catalina之Terminal配置
昨天把MBP格式化,重装了最新的MacOS Catalina系统,众所周知,Mac下的Terminal并没有默认配置ll
这样好用的命令,出于Linux下习惯,就想直接配置下,然后,就遇到了很坑的问题,配置文件死活不生效,每次打开命令行后,都需要source
下才可以,真的要人命,具体问题,且听我细细道来~
MacOS Catalinna之前的环境变量配置
在MacOS Catalina之前,MacOS通常使用Bash作为默认shell。
# 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
打开时自动载入的,并不遵循前面三个用户配置文件的读取规则。
环境变量PATH
的设置语法:
# 使用冒号作为分隔符
export PATH=$PATH:<PATH 1>:<PATH 2>:<PATH 3>:------:<PATH N>
全局环境变量设置
MacOS的全局环境变量配置大致有四种方式,需要注意的是,这些文件通常涉及到系统级别环境变量,修改时一般需要root
权限。
/etc/paths
文件
/etc/paths
文件中存放的是一行行路径信息,只需要在该文件中添加某个目录的路径即可配置为全局变量。
/etc/profile
文件
/etc/profile
文件是全局配置,不管哪个用户登陆,都会读取该文件,通常不建议直接修改该文件。
/etc/bashrc
文件
/etc/bashrc
文件是Bash Shell
的全局公有配置文件,通常在该文件中添加系统级环境变量,在Bash Shell
执行时,不管以任何方式执行,都会读取该文件。
/etc/paths.d
目录
通常情况下,不推荐直接对上面三个文件直接修改,原因在于,系统每安装一个软件,通常都需要为该软件配置相应的全局环境变量,如果一直对上面三个文件追加和修改的话,耦合性都太高了,上述三个文件会越来越复杂。
为了便于软件的管理,通常使用下面的方式进行全局环境变量的配置:
# 在/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_profile
文件
注意: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下的环境变量配置
绕了一大圈,到现在,我还没有说清楚自己遇到的问题,就是,在安装完全新的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命令了
总的来说,遇到问题,不要想当然,应该首先检查所有的前置条件,这样才可以尽量避免无用功!!!
原文地址:https://www.cnblogs.com/yjjs2020/p/11708212.html
- 我的WCF之旅(2):Endpoint Overview
- 关于CPU漏洞Spectre的详细分析
- 17.2 准备工作
- 克隆虚拟机的注意点
- keepalived+nginx搭建高可用(注意点)
- 我的WCF之旅(10):如何在WCF进行Exception Handling
- 安装nginx出现的问题
- 18.11 LVS DR模式搭建
- Linux基础(day64)
- 我的WCF之旅(9):如何在WCF中使用tcpTrace来进行Soap Trace
- 物联网设备已沦陷,咖啡机也不能例外
- 我的WCF之旅(13):创建基于MSMQ的Responsive Service
- 开发自己的Data Access Application Block[上篇]
- 18.9/18.10 LVS NAT模式搭建
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法