shell有哪些?Zsh和Bash的区别是什么?
使用Mac系统的朋友应该比较熟悉Zsh和Bash这两个shell,但是对二者具体有什么区别可能不太了解。本文将从这两个shell入手,对相关概念以及二者区别进行解释。
shell 单词的本意是 “壳子” ,在计算机领域一样可以理解为机器外面的一层壳,目的是进行用于人机交互,本质上是 命令解释器 。只要是人与电脑之间交互的接口,就可以称为 shell。
需要说明的是,常见的概念包括shell脚本,其指的是采用shell语言编写的脚本,可以使用shell程序来进行执行,而本文所说的shell均指的是shell程序。二者之间的关系可见下图:
在现代的 Linux 上,sh 已经被 bash 代替, /bin/sh 往往是指向 /bin/bash 的符号链接。如果你希望查看当前 Linux或MacOS的默认shell,那么可以输出 shell 环境变量:
如果想知道自己系统安装了哪些shell,使用如下命令可得到如下所示的信息。
如上所说,shell 在启动时都会去找配置文件,然后运行它。你安装的一些脚本,如果想让它能够全局运行,就需要在配置文件中设置路径。有过设置路径后还是不管用的经历吗?多半是因为把配置写在了错误的配置文件里。* 应该在配置shell(最常见的是配置默认命令)之前,使用 echo $SHELL ,确认自己现在用的是什么shell后,再去编辑对应的配置文件 *。
一句话,二者均是shell的一种,zsh能基本完美兼容bash的命令,并且使用起来更加优雅。由于bash或zsh本质上都是解释器,他们所共同服务的是shell语言,因此在命令语法上基本相同,部分兼容性差异可参考: zsh和bash的兼容性差异 。
二者切换:
在配置文件方面:
当从bash切换为zsh时,如果不想重新配置一遍 .zshrc 文件,可以__在 .zshrc 文件中加上 source ~/.bash_profile ,从而直接从 .bash_profile 文件读取配置。