关于Mac中的shell

news/2025/1/8 5:20:01/

1 MacOS中的shell

介绍:

在 macOS 系统中,Shell 是命令行与系统交互的工具,用于执行命令、运行脚本和管理系统。macOS 提供了多种 Shell,主要包括 bash 和 zsh。在 macOS Catalina(10.15)之前,bash 是默认的 Shell,这是一种经典的 Shell,广泛应用于 Unix 和 Linux 系统中,语法简单且稳定,适合运行脚本和执行命令。然而,由于 bash 的许可证问题(GPLv3),自 Catalina 开始,Apple 将默认 Shell 切换为 zsh。相比 bash,zsh 提供了更丰富的功能,如强大的自动补全、灵活的插件系统和个性化主题(如 oh-my-zsh),适合现代开发者和系统管理员使用。macOS 通过 终端(Terminal) 或更现代化的 iTerm2 工具为用户提供 Shell 访问入口,同时支持用户在多种 Shell 之间自由切换,满足不同需求。

zsh 的优势

1自动补全:

zsh 的补全功能比 bash 更强大,可以根据上下文智能补全命令和文件。
配合插件管理框架(如 oh-my-zsh),支持 Git 补全、语法高亮等功能。

2主题与美化

zsh 支持丰富的主题(如 Powerlevel10k),可以显示更多的信息(如当前目录、分支状态、时间等)。

3插件支持

zsh 提供了灵活的插件系统,像 oh-my-zsh 或 zinit 让用户可以轻松扩展功能。

4强大语法扩展:

更强的路径通配符(**)、更灵活的数组操作等。

如下图为bash环境:

在这里插入图片描述
切换到 zsh:

chsh -s /bin/zsh

node.js在bash中可以显示,在zsh中呢?

zsh 中并不是没有 Node.js 和 npm,而是目前终端运行环境已经切换到 bash,而 zsh 环境下可能未正确配置 Node.js 和 npm 的路径(PATH)。因此,如果直接切换到 zsh,可能会出现找不到 Node.js 和 npm 的情况。

原因

当执行 bash 命令后,终端从默认的 zsh 切换到了 bash,并成功执行了 node -v 和 npm -v,表明 Node.js 和 npm 已经在系统中安装。

解决方法

1、检查 zsh 环境下的 PATH 配置
在 zsh 环境下运行以下命令,检查是否包含 Node.js 和 npm 的路径:

echo $PATH

正常情况下,Node.js 应该安装在路径 /usr/local/bin 或 ~/.nvm/versions/node/… 中。如果缺少这些路径,则需要手动添加。
2、添加 Node.js 和 npm 到 zsh 的 PATH
打开 ~/.zshrc 文件,添加 Node.js 的路径。可以使用以下命令编辑:

nano ~/.zshrc

在文件末尾添加类似以下内容(根据你的安装路径调整):

export PATH="/usr/local/bin:$PATH"

如果使用的是 nvm(Node.js 版本管理工具),则可以添加:

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion

保存后,运行以下命令使配置生效:

source ~/.zshrc

3、测试 Node.js 和 npm
切换到 zsh 环境后,运行以下命令确认配置是否成功:

node -v
npm -v

为啥bash仍然存在?

1兼容性

bash 是经典的 Shell,许多历史遗留的脚本和工具依赖它,尤其是在老版本的 macOS 或从 Linux 系统移植的程序中。

2用户习惯

对于熟悉 Linux 系统的用户来说,bash 是他们习惯的环境。macOS 保留 bash 是为了满足这些用户的需求。

3系统支持

macOS 内置了一些与 bash 脚本兼容的系统功能和管理工具,因此 bash 不会被完全移除。

2 Windows中的shell

介绍

Windows 系统的 Shell 主要有两种:CMD(命令提示符) 和 PowerShell。CMD 是一种经典的 Shell,最早继承自 MS-DOS,主要用于运行简单命令和批处理脚本(.bat 文件)。它操作直观,但功能较为有限,主要面向普通用户和早期的 Windows 系统。与之相比,PowerShell 是微软推出的新一代 Shell,基于 .NET 框架开发,功能更加强大,支持丰富的命令集(cmdlet)、对象操作以及高级脚本编写(.ps1 文件)。PowerShell 不仅适用于 Windows 系统,还在其核心版本(PowerShell Core)中实现了跨平台支持,能够在 Linux 和 macOS 上运行。近年来,微软推出了 Windows Terminal,整合了 CMD、PowerShell 和 Windows Subsystem for Linux(WSL),为用户提供了一个统一的命令行工具,带来更好的多环境支持和用户体验。

powershell的优势

1丰富的命令集:

PowerShell 提供了大量内置命令,称为 cmdlet,功能远超 CMD,可以用于系统管理、文件操作和网络任务等。
例如,Get-Process 可以直接查询和管理系统进程,而 CMD 需要通过较复杂的工具实现类似功能。

2面向对象的操作:

PowerShell 不仅传递文本,还可以直接操作对象。例如,查询进程时,可以直接访问进程对象的属性(如名称、ID)并对其进行操作。

3脚本支持:

PowerShell 支持编写复杂脚本(.ps1 文件),可完成自动化任务,例如批量管理用户权限、文件备份等,大大提高效率。

4跨平台:

通过 PowerShell Core,用户可以在 Windows、Linux 和 macOS 上运行相同的命令和脚本,提供一致的跨平台体验。


http://www.ppmy.cn/news/1561469.html

相关文章

MS7337M集成单通道视频运放与视频同轴线控解码

产品简述 MS7337M 是单通道视频放大器与视频同轴线控解码器为一体的 芯片。视频放大器内部集成 6dB 增益轨到轨输出驱动器以及 6 阶滤波 器, -3dB 带宽达 81MHz 。视频同轴线控解码器内部集成一颗高速处 理器,针对模数混合信号进行有效分离。…

ChromeDriver 版本不匹配问题解决,ChromeDriver最新版本下载安装教程

在 Python 的 Selenium 自动化测试中,ChromeDriver 是一款不可或缺的工具,用于桥接代码与浏览器之间的操作。然而,很多人在运行自动化脚本时都会碰到这样的问题:“session not created: This version of ChromeDriver only suppor…

Alternative to vJoy and FreePIE joystick and input emulators on Linux

这是我之前在个人网站上发布的一篇旧博客文章。我正在将所有内容转移到CSDN。感谢阅读! This project is one step forward toward setting up universal mouse steering in racing games on Linux. Some games come with mouse support out of the box, while othe…

明源地产ERP VisitorWeb_XMLHTTP.aspx SQL注入漏洞复现

0x01 产品简介 明源地产ERP是一款专门为房地产行业设计的企业资源规划(ERP)系统,旨在帮助房地产企业实现全面的信息化管理,提高运营效率和管理水平。系统涵盖了项目管理、财务管理、供应链管理、客户关系管理(CRM)、人力资源管理等多个核心功能模块,通过整合企业的各个…

flink的EventTime和Watermark

时间机制 Flink中的时间机制主要用在判断是否触发时间窗口window的计算。 在Flink中有三种时间概念:ProcessTime、IngestionTime、EventTime。 ProcessTime:是在数据抵达算子产生的时间(Flink默认使用ProcessTime) IngestionT…

哦?将文本转换为专业流程图的终极解决方案?

前言 今天介绍的这款工具号称是将文本转换成专业流程图的终极解决方案。一起来看看是否能满足你的需求吧。 首页 平平无奇的首页(通常地下隐藏着不平常的东西),和我们之前介绍过的工具类似,核心就是我们中间的文本输入框。在输入…

【Python】基于blind-watermark库添加图片盲水印

blind-watermark 是一个用于在图像中添加和提取盲水印的 Python 库。盲水印是一种嵌入信息(如水印)到图像中的方法,使得水印在视觉上不可见,但在需要时可以通过特定的算法进行提取。以下是如何使用 blind-watermark 库来添加和提取…

君正T41交叉编译ffmpeg、opencv并做h264软解,利用君正SDK做h264硬件编码

目录 1 交叉编译ffmpeg----错误解决过程,不要看 1.1 下载源码 1.2 配置 1.3 编译 安装 1.3.1 报错:libavfilter/libavfilter.so: undefined reference to fminf 1.3.2 报错:error: unknown type name HEVCContext; did you mean HEVCPr…