如果你每天有超过两小时泡在终端里,端工选错shell就像穿错鞋爬山——能走,具排但每一步都别扭。行榜Bash 依然是端工多数 Linux 发行版的默认选项,这没什么好争的具排。可默认不等于最优。行榜我在三台不同配置的端工机器上轮换用过 bash、zsh、具排fish 和 nushell,行榜最后只留了两个。端工
先看 bash。具排它的行榜优势是“哪儿都有”。你 ssh 进一台 2012 年的端工 CentOS 6 老服务器,bash 4.1 就在那儿等着。具排脚本兼容性最好,行榜网上抄来的运维片段基本能跑。但交互体验停留在上个时代:补全要自己配,历史搜索得按 Ctrl+R 一下下敲。我见过有人把 bash 调教得跟 zsh 一样顺手,代价是 .bashrc 写了八百行。不值。
zsh 是那种“你愿意花时间它就回报你”的 shell。oh-my-zsh 虽然被老手嫌弃臃肿,但对刚转过来的人确实省事。我自己的配置只有三行:setopt auto_cd、bindkey 绑定历史搜索、加上 zsh-autosuggestions 插件。补全菜单用 Tab 翻页,路径纠错能猜出你想去 /etc/nginx/sites-available 而不是 /etc/nginx/site-availble。有个细节:zsh 的 glob 限定符能写 ls *(.) 只列普通文件,bash 得绕一圈 find。这功能我一个月用不到一次,但用到时很爽。
fish 走的是另一条路。开箱即用,语法高亮、自动建议、基于历史记录的补全,全给你装好。配置文件用 fish_config 在浏览器里点选,不用背 setopt 那一堆。代价是脚本语法不兼容 POSIX。你写 for i in (seq 1 10),别人 bash 里跑不了。我拿 fish 当交互式 shell,脚本还是老老实实写 bash。另外 fish 的变量作用域设计有点怪,set -gx 和 set -U 的区别我查过三次文档还是记不住。
nushell 值得单独说。它把管道里的数据当成结构化表格,ls | where size > 10mb 这种写法在 bash 里要 awk 拼半天。输出自带颜色和列对齐,不用装 lsd 或 exa。但生态还嫩。我试过用它跑一个调用 python 脚本的流程,结果 nu 的字符串转义和外部命令传参规则跟 bash 不一样,调了半小时。适合喜欢尝鲜、日常操作以查看数据为主的人。生产环境里我还没见过谁拿 nu 当登录 shell。
所以排行榜怎么排?按“无脑推荐度”:fish 第一,zsh 第二,bash 第三,nushell 第四。按“服务器上能活多久”:bash 第一,zsh 第二,fish 和 nu 并列倒数。按“折腾完的满足感”:zsh 第一,nushell 第二,fish 第三,bash 你折腾它干嘛。
有个现象挺有意思。我周围用 zsh 的人平均 .zshrc 长度是 200 行起步,用 fish 的人配置目录里通常只有两个文件。前者享受控制感,后者只想赶紧干活。没有对错。你要是刚接触终端,先装 fish 用两周,再回头看 bash 脚本,会发现自己对“shell 该做什么”的理解清晰很多。至于我,主力机 zsh 加 fish 做临时会话,服务器上永远 bash。就这么简单。