macOS中的终端命令
1、由macOS配置环境变量引申的问题
通常在macOS上配置环境变量,比如配置maven的环境变量,是这样的操作的。在用户的目录下面,找到或者新建 .bash_profile 文件,然后按照如下配置:
export MAVEN_HOME=/Users/name/downloads/apache-maven-3.8.1 export PATH=$PATH:$MAVEN_HOME/bin export PATH=$PATH:/usr/local/mysql/bin export PATH=$PATH:/opt/homebrew/bin
使用source命令重新载入一下,
source .bash_profile
这样这终端输入 mvn 命令,即可执行对应的maven命令了。过了一段时间发现,每次启动终端时候,都需要重载一下 .bash_profile 文件才能使环境变量生效。解决方法:找到或者新建文件 .zshrc ,添加下面一段:
source ~/.bash_profile
每次终端启动时,就会自动重载。
实际上遇到这类问题,是因为对操作系统和Bash的不熟悉,零零碎碎的“解决方法”,只能短暂的解决问题。这里总结下macOS终端上常用的Bash命令,旨在熟悉常见的cv脚本的配置原理。
2、Bash 简介
Bash是Linux 和 Unix系统的一种命令行环境(cli),解释输入的命令,具有完整的变量赋值、条件判断、循环操作等语法。命令行环境有很多,使用macOS查看支持的命令行环境:
cat /etc/shells
# List of acceptable shells for chpass(1). # Ftpd will not allow users to connect who are not using # one of these shells. /bin/bash /bin/csh /bin/dash /bin/ksh /bin/sh /bin/tcsh /bin/zsh
其中Bash是大多数Linux发行版的默认的命令行环境。在macOS中,从Catalina 版开始,Mac 将使用 zsh 作为默认命令行环境。zsh 与 Bourne Shell (sh) 高度兼容,并且与 bash 基本兼容,但存在一些差别。具体参见。
查看当前的环境使用命令:
echo $SHELL
/bin/zsh
3、常用的Bash命令
1、输入与输出
echo命令用于打印一行或一段文本。
bash-3.2$ echo hi hi
read命令用于获取用户的输入内容。
bash-3.2$ read i && echo $i hi //输入内容 hi //输出内容 bash-3.2$
2、语句操作符
分号 ; 是命令的结束符,同行表示紧接着执行下一条命令:(无论第一条命令是否成功,下一条都会执行与之不同的是 && ||)
read i;echo $i
与&& ,与编程汇总的布尔操作符类似,第一条命令执行成功后,执行第二条命令;
read i && echo $i
或|| ,表示第一条命令执行失败后,执行第二条命令;
read i || echo $i
3、区分命令类型
有些命令是系统自带的,有些命令是在外部程序添加到环境变量后运行的,使用type命令区分内置命令和外部程序。
bash-3.2$ type echo echo is a shell builtin
bash-3.2$ type mysql mysql is /usr/local/mysql/bin/mysql
4、Bash变量
变量分为环境变量与系统变量。使用env命令显示环境变量,
env
创建变量直接申明变量名即可,注意赋值操作不可加空格,
i=1 echo $i //1
读取变量使用 $+变量名即可,如上所示。
export 命令 用于向不同的终端之间传递变量。在 zsh 下定义变量,使用export命令在bash也能获取到。
export MAVEN_HOME=/Users/name/downloads/apache-maven-3.8.1
可以看到环境变量脚本中定义的 MAVEN_HONE 变量使用了export。
5、bash历史记录
bash会记录命令的历史记录,在macOS系统中保存在隐藏的文件 .bash_history文件中。并且对应的命令行环境均有对应记录文件。
history 命令同样显示使用过的命令记录,
history . . . 98 echo $i 99 history
6、source 命令
source命令用于重新加载一个配置文件,
source ~/.bash_profile
表示重新加载.bash_profile中配置的环境变量。
4、macOS中环境变量的生效顺序
使用交互式命令行环境时,每次启动一次命令行环境,都会开启一次Session对话,按照登录的状态可分为登录的Session和非登录的Session。
在Linux中登录的session会初始化系统环境,初始化的顺序依次为:(注意用户级的配置脚本,第一个加载成功后,不再加载后续脚本文件。)
- 系统级:/etc/profile 、/etc/paths ;
- 用户级:~/.bash_profile 、~/.bash_login 、~/.profile 、~/.bashrc 。
Linux中非登录的Session,不会进行环境的初始化。初始化的脚本加载顺序为:
- /etc/bash.bashrc:对全体用户有效。
- ~/.bashrc:仅对当前用户有效。
在macOS中,我们打开的终端均为非登录的Session。因此每次启动终端,都会加载.bashrc 或 .zshrc文件, 这也是上述为何将重载命令source ~/.bash_profile 写入 .zshrc 的原因。
参考链接:
1、https://support.apple.com/zh-cn/HT208050
2、https://wangdoc.com/bash/index.html