zsh介绍:1:Catalina中的缺省shell

在这里插入图片描述
在2019年macOS推出了Catalina版本,在这个版本中zsh取代了bash作为缺省的shell,虽然据坊间推测这个与bash 3.2之后已经基于GPL v3协议有关(macOS的bash 3.2基于GPL v2)。对于诸如分屏和定制化的终端不能满足日常操作需要的用户,将目光转向了tmux等终端分屏器,其实zsh也是一个很不错的选择,尤其在定制个性化的终端显示上,社区还有很多扩展的主题比如oh-my-zsh可以直接拿来即用。这篇文章介绍一下在CataLina下从Bash转向zsh的一些基础知识。

OS版本

Catalina版本之下,zsh会被缺省安装,而且会提示zsh将会成为缺省的shell。
在这里插入图片描述

liumiaocn:~ liumiao$ sw_vers
ProductName:	Mac OS X
ProductVersion:	10.15.2
BuildVersion:	19C57
liumiaocn:~ liumiao$

zsh版本

liumiaocn:~ liumiao$ zsh --version
zsh 5.7.1 (x86_64-apple-darwin19.0)
liumiaocn:~ liumiao$ 

操作系统支持的shell

操作系统支持的shell可以从/etc/shells中进行确认,比如Catalina中如下所示:

liumiaocn:~ liumiao$ 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
liumiaocn:~ liumiao$ 

可以看到除了bash、csh之外,zsh也是支持之列。

提示警示信息

当macOS升级至Catalina之后,再次登录之后会提示“The default interactive shell is now zsh”(缺省交互的shell现在已经是zsh)。
在这里插入图片描述

安装方法

Catalina版本中缺省会安装zsh,如果是之前的版本的OSX,则可以使用如下命令进行:

安装命令(OSX):homebrew install zsh

安装命令(CentOS):yum install -y zsh

安装命令(Ubuntu):apt-get install -y zsh

Catalina升级的影响

升级至Catalina,虽然缺省的shell已经变成了zsh,但是在这个版本目前并不会直接影响用户的使用,可以看到虽然有提示信息,但是缺省的脚本仍然是Bash
在这里插入图片描述
而终端的缺省的Preferences菜单项的显示也如下所示(/bin/bash)
在这里插入图片描述

zsh 与 Bash的兼容

zsh是兼容Bash的,而且zsh中还提供了Bash的兼容模式,而且shell如果是符合POSIX标准的情况下,理论上来说应该是无视这其中的区别的。在后续的文章中将进一步展开介绍。

扫描二维码关注公众号,回复: 8914964 查看本文章

Bash到zsh

转变方法

输入chsh -s /bin/zsh即可从Bash转变为zsh

liumiaocn:~ liumiao$ chsh -s /bin/zsh
Changing shell for liumiao.
Password for liumiao: 
liumiaocn:~ liumiao$ 

重新打开终端之后显示信息如下所示:

liumiao@liumiaocn ~ % echo $SHELL
/bin/zsh
liumiao@liumiaocn ~ % 

影响事项

需要注意的是之前在.bash_profile需要重新设定到zsh中,不然一定会有影响。比如之前的环境中有Angular的nvm的设定,在Bash下能够正常动作

liumiaocn:~ liumiao$ echo $SHELL
/bin/bash
liumiaocn:~ liumiao$ ng --version

     _                      _                 ____ _     ___
    / \   _ __   __ _ _   _| | __ _ _ __     / ___| |   |_ _|
   / △ \ | '_ \ / _` | | | | |/ _` | '__|   | |   | |    | |
  / ___ \| | | | (_| | |_| | | (_| | |      | |___| |___ | |
 /_/   \_\_| |_|\__, |\__,_|_|\__,_|_|       \____|_____|___|
                |___/
    

Angular CLI: 8.3.8
Node: 10.15.3
OS: darwin x64
Angular: 
... 

Package                      Version
------------------------------------------------------
@angular-devkit/architect    0.803.8
@angular-devkit/core         8.3.8
@angular-devkit/schematics   8.3.8
@schematics/angular          8.3.8
@schematics/update           0.803.8
rxjs                         6.4.0
    
liumiaocn:~ liumiao$ 

而切换至zsh之后,则无法正常找到

liumiao@liumiaocn ~ % echo $SHELL
/bin/zsh
liumiao@liumiaocn ~ % which ng
ng not found
liumiao@liumiaocn ~ % 

可根据需要修改.zshrc文件(如果没有Bash特定的设定,比如Bash补全的设定方法等,只是一些export命令或者一些通用的shell脚本,基本可以直接拷贝至.zshrc文件中),此处示例中使用的环境中使用此种方法设定之后,重新打开终端发现之前的环境已经可以正常运行了

liumiao@liumiaocn ~ % echo $SHELL
/bin/zsh
liumiao@liumiaocn ~ % which ng
/Users/liumiao/.nvm/versions/node/v10.15.3/bin/ng
liumiao@liumiaocn ~ % ng --version

     _                      _                 ____ _     ___
    / \   _ __   __ _ _   _| | __ _ _ __     / ___| |   |_ _|
   / △ \ | '_ \ / _` | | | | |/ _` | '__|   | |   | |    | |
  / ___ \| | | | (_| | |_| | | (_| | |      | |___| |___ | |
 /_/   \_\_| |_|\__, |\__,_|_|\__,_|_|       \____|_____|___|
                |___/
    

Angular CLI: 8.3.8
Node: 10.15.3
OS: darwin x64
Angular: 
... 

Package                      Version
------------------------------------------------------
@angular-devkit/architect    0.803.8
@angular-devkit/core         8.3.8
@angular-devkit/schematics   8.3.8
@schematics/angular          8.3.8
@schematics/update           0.803.8
rxjs                         6.4.0
    
liumiao@liumiaocn ~ % 
发布了1020 篇原创文章 · 获赞 1288 · 访问量 398万+

猜你喜欢

转载自blog.csdn.net/liumiaocn/article/details/104097735