Mac中的Zsh和Bash你了解吗_mac终端bash和zsh区别_M-Codes的博客-程序员秘密

技术标签: bash  mac  macos  

使用Mac系统的朋友应该比较熟悉Zsh和Bash这两个shell,但是对二者具体有什么区别可能不太了解。本文将从这两个shell入手,对相关概念以及二者区别进行解释。


1.什么是shell?

shell 单词的本意是“壳子”,在计算机领域一样可以理解为机器外面的一层壳,目的是进行用于人机交互,本质上是命令解释器。只要是人与电脑之间交互的接口,就可以称为 shell。
需要说明的是,常见的概念包括shell脚本,其指的是采用shell语言编写的脚本,可以使用shell程序来进行执行,而本文所说的shell均指的是shell程序。二者之间的关系可见下图:

shell命令与shell程序之间的关系

2.有哪些shell?

  • zsh
    很多人的 mac 中会使用 zsh 而不是 bash,一大半是因为 oh-my-zsh 这个配置集,它兼容 bash,还有自动补全等好用的功能。
  • sh 的全称是 Bourne shell,由 AT&T 公司的 Steve Bourne开发,为了纪念他,就用他的名字命名了。sh 是 UNIX 上的标准 shell,很多 UNIX 版本都配有 sh。sh 是第一个流行的 shell。
  • csh
    sh 之后另一个广为流传的 shell 是由柏克莱大学的 Bill Joy 设计的,这个 shell 的语法有点类似C语言,所以才得名为 C shell ,简称为 csh。
  • tcsh
    tcsh 是 csh 的增强版,加入了命令补全功能,提供了更加强大的语法支持。
    ash一个简单的轻量级的 Shell,占用资源少,适合运行于低内存环境,但是与下面讲到的 bash shell 完全兼容。
  • bash
    bash由 GNU 组织开发,保持了对 sh shell 的兼容性,是各种 Linux 发行版默认配置的 shell。bash 兼容 sh 意味着,针对 sh 编写的 shell 代码可以不加修改地在 bash 中运行。尽管如此,bash 和 sh 还是有一些不同之处:一方面,bash 扩展了一些命令和参数;另一方面,bash 并不完全和 sh 兼容,它们有些行为并不一致,但在大多数企业运维的情况下区别不大,特殊场景可以使用 bash 代替 sh。

3.怎么查看自己使用的是哪一个shell?

在现代的 Linux 上,sh 已经被 bash 代替,/bin/sh往往是指向/bin/bash的符号链接。如果你希望查看当前 Linux或MacOS的默认shell,那么可以输出 shell 环境变量:

$ echo $SHELL

如果想知道自己系统安装了哪些shell,使用如下命令可得到如下所示的信息。

cat /etc/shells

系统中已安装的shell

4.shell如何配置?

如上所说,shell 在启动时都会去找配置文件,然后运行它。你安装的一些脚本,如果想让它能够全局运行,就需要在配置文件中设置路径。有过设置路径后还是不管用的经历吗?多半是因为把配置写在了错误的配置文件里。* 应该在配置shell(最常见的是配置默认命令)之前,使用 echo $SHELL,确认自己现在用的是什么shell后,再去编辑对应的配置文件 *。

5.bash和zsh的区别

一句话,二者均是shell的一种,zsh能基本完美兼容bash的命令,并且使用起来更加优雅。由于bash或zsh本质上都是解释器,他们所共同服务的是shell语言,因此在命令语法上基本相同,部分兼容性差异可参考:zsh和bash的兼容性差异。
二者切换:

  • 切换bash: chsh -s /bin/bash
  • 切换zsh: chsh -s /bin/zsh
  • 在终端app的系统偏好设置里手动设置。

在配置文件方面:

  • bash读取的配置文件:~/.bash_profile文件
  • zsh读取的配置文件:~/.zshrc文件

当从bash切换为zsh时,如果不想重新配置一遍.zshrc文件,可以__在.zshrc文件中加上source ~/.bash_profile,从而直接从.bash_profile文件读取配置。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/efew212efe/article/details/124974336

智能推荐

element-ui el-table 动态新增 el-table-column,表格闪现问题的分析与解决_elementui 表格数据新增_杰~JIE的博客-程序员秘密

element-ui el-table 动态新增 el-table-column,表格闪现问题的分析与解决在做动态增加删除 el-table 的列,遇到 column 显示隐藏会造成 el-table 闪烁情况:效果如下:代码如下:<template> <div> <el-select v-model="select"> <el-option label="显示列3" :value="true"></el-opt

页面加载完成之后执行js函数window.onload 和 $().ready(function) 以及 <body onload="">的同级函数详解_window.onload成功之后函数_预见才能遇见的博客-程序员秘密

转载请注明预见才能遇见的博客:http://my.csdn.net/原文地址:页面加载完成之后执行js函数window.onload 和 $().ready(function) 以及 的同级函数详解1.window.onload = function(){} / $(window).load(function)方法是在网页中的所有的元素(包括元素的所有关联文件:图片、音视频、f

史上最全的App推广入门篇【新手必备】_专属爱情007的博客-程序员秘密

说到移动App的推广,高手一般都有自己一套成熟的推广套路,运用起来也是驾轻就熟,但是对于新手来说,在创业团队初始阶段,产品不成熟、渠道不成熟、团队不成熟、预算不充足、用户没粘性的情况下,该怎么做推广呢?今天就推荐一些通用的入门级推广方案,希望能给推广新手带来帮助。一、免费渠道:1、在互联网中留下App的“说明书”这里提到的“说明书”是指关于App的简介或者功能介绍。一款产品刚开发出来首先要扎...

STM32之CubeL4 ( ADC )_stm32l431cct6 adc cube_莫莫伽!的博客-程序员秘密

学习目标:使用ADC采集电压通过配置ADC1_IN1通道,结合ADC模数转换函数,将电压模拟量转换为数字量,并将数据通过串口打印输出。CubeMX配置参数配置在 Analog 中选择 ADC1 设置,并选择 IN1 通道1,选择 IN1 Single-ended单通道。ADC具体配置参数下图所示需要配置的参数已在图中框出,其他只需要保持默认就可以。ADC_Settings:Clock Prescaler:Asynchronous clock mode divided by 1 1

linux下使用logrotate管理日志,切割日志_陈志航1995的博客-程序员秘密

废话不多说直接说方法:linux自带这个东西默认路径 /etc/logrotate.conf 代表的是默认的配置自定义配置的地址 /etc/logrotate.d //里面存放的是已经配置的文件直接上例子:/root/.forever/*.log { daily //代表每天循环一次 missingok // rotate 5 //比如你每天分割一次,到第六天会把第一天的替换掉 dateext //生成的文件格式 notifempty //对于

结构、联合、位字段_、zyx的博客-程序员秘密

结构、联合、位字段1、结构体空洞结构字段在存储器中并不一定是挨着摆放的,有时两个字段之间会有小的空隙。 因为计算机总希望数据能对齐字边界,如果计算机的字长是32位,就不希望某个变量跨越32位的边界保存。 因为计算机按字从存储器中读取数据,如果某个字段跨越了多个字,CPU就必须读取多个存储单元,并以某种方式把督导的值合并起来。会很慢。2、匿名结构 匿名结构就是没有名字的结构,typedef s

随便推点

ajax实现快递单号查询_dengluandai1740的博客-程序员秘密

效果:(代码写的有点乱,自行修改就可以了)  源码:  index.php&lt;!DOCTYPE html&gt;&lt;html lang="en"&gt;&lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;title&gt;中通快递单号查询&lt;/title&gt; &lt;styl...

python爬取王者荣耀全皮肤高清无水印图片_学到老才能活到老的博客-程序员秘密

前期准备:安装requests库,我猜你可能需要:Python网络爬虫与信息提取笔记01-Requests库入门Windows下安装pip和换源import osimport requestsurl = 'https://pvp.qq.com/web201605/js/herolist.json'herolist = requests.get(url) # 获取英雄列表json文件herolist_json = herolist.json() # 转化为json格式hero_na.

oracle sql经典面试题,经典SQL面试题2_胖泽的博客-程序员秘密

题目:一张名为workersalary的表,要求查询出全部信息,并且salary最高的三个人按升序排列在结果的最开头,其余的人按原有顺序排列。这个sql如何写?解答:(1)题意理解假如原先的表是这样的namesalaryLiuYi2000ChenEr1000ZhangSan5000LiSi4000WangWu8000ZhaoLiu6000SunQi7000ZhouBa3000题目要求变成这样nam...

SQLite--日期 & 时间_因人而异的博客-程序员秘密

函数 函数 描述 date(timestring, modifier, modifier, …) 以 YYYY-MM-DD 格式返回日期。 time(timestring, modifier, modifier, …) 以 HH:MM:SS 格式返回时间。 datetime(timestring, modifier, modifier, …) 以 YYYY-MM-DD

解决idea编译巨慢问题_idea编译时间长_张张打怪兽的博客-程序员秘密

idea-tomcat部署的时候差不多要20-30分钟,搞得我怀疑是不是我电脑的问题1.检查你的项目大小,如果是大的离谱,超出预算可以继续看下去。2.问题产生的原因是idea输出路径文件一直在叠加,导致编译量巨大解决方案第一步第二步第三步第四步第五步接下来你把artifacts加进tomcat就可以了关于热部署,java文件不编译问题,写完java后,ctrl+f9编译一下,不行的话,重启tomcat,这个过程很快...

SpringBoot,写完老板又让我转回后端_深知她是一场梦的博客-程序员秘密

SpringBoot1:SpringBoot基础入门1-1:什么是SpringBoot1-2:什么是微服务1:SpringBoot基础入门1-1:什么是SpringBoot什么是Spring&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Spring是一个开源框架,2003年兴起的一个轻量级的Java开发框架,作者:Rod Johnson。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Spring是为了解决企