简介
Zsh(Z Shell)是一款功能强大的开源Unix Shell,基于Bourne Shell开发,兼容Bash语法,但提供了更丰富的交互式体验和高级功能。以下是其核心特点:
-
历史与定位
Zsh由Paul Falstad于1990年创建,现为macOS默认Shell(自Catalina起),并在Linux开发者中广泛流行。它整合了Bash、ksh等Shell的优势,既支持日常交互式操作,又能运行Bash兼容脚本。 -
核心优势
- 智能交互:支持上下文感知的自动补全(如命令、路径、Git分支)、拼写纠错及模糊搜索历史命令。
- 高度可定制:通过主题(如Powerlevel10k)美化提示符,显示Git状态、环境变量等信息;插件系统(如Oh My Zsh)提供语法高亮、自动建议等扩展功能。
- 增强功能:递归通配符(
/*.txt)、浮点运算、更灵活的数组操作及进程替换等。
-
适用场景
适合开发者、运维人员提升终端效率,尤其推荐给需要个性化界面(如Powerline风格主题)、频繁使用Git/Docker等工具的用户。对于脚本编写,Zsh兼容Bash但建议复杂脚本仍使用Bash以保证兼容性。 -
配置简化 通过框架如Oh My Zsh,可快速安装插件和主题,简化配置流程。例如,安装后仅需修改
.zshrc文件即可启用插件(如自动补全、语法高亮)。
总结来看,Zsh通过强大的交互功能和可扩展性,成为提升命令行效率的优选工具,尤其适合追求高效与美观的用户。
自己的老文档,分享给掘金的新朋友
安装
apt install zsh -y
chsh -s $(which zsh)
# 使用国内github 镜像
sh -c "$(curl -fsSL https://gitee.com/mirrors/oh-my-zsh/raw/master/tools/install.sh)"
# 安装插件
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
# 绕开GFW
git clone https://gitee.com/mirrors/zsh-autosuggestions.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
git clone https://gitee.com/mirrors/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
配置 提示
source $ZSH/oh-my-zsh.sh
# 重置提示
PROMPT='%F{cyan}%n@%m%f %F{yellow}%~%f %# '
安装 docker 命令提示
curl -L https://raw.githubusercontent.com/docker/cli/master/contrib/completion/zsh/_docker -o ~/.zsh/completions/_docker
编辑 ~/.zshrc
source $ZSH/oh-my-zsh.sh
# 添加补全脚本路径
fpath=(~/.zsh/completion $fpath)
# 启用 Zsh 补全系统
autoload -Uz compinit && compinit -i
使用
要注意 zsh 的配置加载会遵循一定的顺序,登陆 shell 和 非登陆shell 还会有区别
-
登录 Shell(login shell)
由系统或终端管理器在用户登录时启动,Shell 程序名前会带-前缀(如-zsh),会依次读取并执行:/etc/zshenv、~/.zshenv/etc/zprofile、~/.zprofile/etc/zshrc、~/.zshrc/etc/zlogin、~/.zlogin
-
非登录 Shell(non-login shell)
在已经登录的会话中打开的新终端或脚本执行时启动,不带-前缀,仅执行:/etc/zshenv、~/.zshenv/etc/zshrc、~/.zshrc
不会执行任何zprofile或zlogin级别的文件
当 vscode 使用 zsh 作为终端shell
vscode 使用的zsh 默认使用的是非登陆shell,所以如果一些系统级别 PATH 最好放到 /etc/zshenv 建议把默认的 /etc/zprofile
if [ -x /usr/libexec/path_helper ]; then
eval `/usr/libexec/path_helper -s`
fi
迁移到 /etc/zshenv