程序媛的mac修炼手册-- 终端shell的驾驭 zsh vs bash

进入终端(Terminal)为新下载的应用配置环境,是Mac生产力up up的关键一步,更是编程小白装大神的第一步。Fake it till you make it , 硅谷大神标准路径~

shell的基本原理

为应用配置环境,相当于在应用和操作系统间架桥。由此,在应用端发出的操作指令,才能准确传递给MacOS执行。shell(命令行解释器)就是这座桥。

MacOS这样基于Unix开发的操作系统,有很多种shell,比如:Bourne Again Shell(简称"bash")、 Korn Shell(简称"ksh")、C Shell(简称"csh"),以及升级迭代后的Z shell(简称"zsh")等。

在终端(Terminal)输入以下命令行,就可查看Mac当前支持的shell种类。当前Mac提供了zsh、bash、csh、dash、ksh、sh或tcsh的选择。

复制代码
open /etc/shells

要查看各个shell的路径,可用以下命令行。该命令行中path是/etc/shells中列出的shell路径之一,如/bin/zsh、/bin/bash、/bin/csh、/bin/dash、/bin/ksh、/bin/sh或/bin/tcsh

复制代码
chsh -s path

**MacOS提供了两种系统默认shell,bash和zsh。**2020年前的macOS系统,是将bash作为默认shell。自2021年发布的macOS 12 Monterey 起,Mac上将zsh作为默认shell。因此,小白跟帖学习时,一定要注意帖中的代码操作是基于zsh 还是bash!!可别自个儿看岔了,还埋怨钓鱼帖害人😂😂

当然,如果不小心跑偏了,还是可以用命令行纠正回来的。例如,在设置环境变量,用以下命令行,可将一些设置从bash配置文件移动到zsh配置文件:

复制代码
export MY_SETTING=1

zsh能替代bash成为macOS的默认shell,那必然是升级迭代的结果,zsh提供了一些新功能和新完善。**zsh与bash大部分兼容,但也存在一些差异。**简单说,bash传达的操作指令,zsh一般也能传达,只是有一点点细节差异。比如,把"马冬梅"传递成"Ma Dongmei",而不是大爷连环问"马冬什么,什么冬梅,马什么梅"!!!

macOS默认哪种shell

要辨认系统默认是哪种shell,方法很简单。看环境变量profile的前缀,究竟是zprofile,还是bash_profile。.zshrc相当于.bashrc,并在每个新的终端会话中运行。保持队形,可别跑偏了。

Mac当前登录交互的shell类型,可以在终端(Terminal)最上面的名称栏查看,如下图所示:

更改默认shell

更改macOS默认shell的方法有好几种,详情可参考苹果官网Use zsh as the default shell on your Mac -- Apple Support (UK)

此处本小白当然采用最简单直接的方法:打开终端,根据需要输入以下命令行

从 bash 切换到 zsh

复制代码
chsh -s /bin/zsh

从 zsh 切换到 bash

复制代码
chsh -s /bin/bash

理解zsh和bash的异同

关于zsh和bash在功能特性上的异同,我简单列了一个思维导图,分享给大伙儿凑合看~

关于zsh和bash的命令符差异,可参考这篇帖子
Zsh和Bash究竟有何不同_zsh bash 区别-CSDN博客

相关推荐
tang7451639625 分钟前
mac的ideal中调用driver = webdriver.Chrome() 启动不了的原因
chrome·python·macos
迦南的迦 亚索的索17 分钟前
PYTHON_DAY21_数据分析
开发语言·python·数据分析
枫叶丹420 分钟前
【HarmonyOS 6.0】ArkWeb 手势获焦模式详解:告别点击获焦,迎接长按触发
开发语言·华为·harmonyos
ID_1800790547321 分钟前
如何使用 Python 调用小红书笔记评论 API 时进行并发控制?
开发语言·笔记·python
lsx20240628 分钟前
PHP Error处理指南
开发语言
沐雪轻挽萤30 分钟前
4. C++17新特性-内联变量 (Inline Variables)
开发语言·c++
Chase_______31 分钟前
【JAVA基础指南(四)】快速掌握类和对象 基础篇
android·java·开发语言
每天吃饭的羊32 分钟前
Node.js 创建可二次编辑的 HTML 文档并生成文件
开发语言·javascript·ecmascript
Cat_Rocky39 分钟前
创建LNMRP后端技术栈
java·开发语言
牛马11139 分钟前
Flutter BoxDecoration border 完整用法
开发语言·前端·javascript