现在都用什么现代化shell了,怎么还在bash呢?
摘要:前言 Linux 服务器一般默认 shell 都是 bash,不太智能,可以用现代化的 shell 来优化命令行的体验。 zsh 是个不错的选择,但默认也是很丑,需要搭配 Oh My Zsh 挺麻烦的,本文介绍现在比较新、开箱即用的 she
前言
Linux 服务器一般默认 shell 都是 bash,不太智能,可以用现代化的 shell 来优化命令行的体验。
zsh 是个不错的选择,但默认也是很丑,需要搭配 Oh My Zsh 挺麻烦的,本文介绍现在比较新、开箱即用的 shell 安装和简单使用方法。
如果直接用 chsh 命令修改默认登录 Shell(Login Shell),一些依赖 Bash 特定环境变量(如 /etc/profile 里的设置)的系统脚本或自动化任务可能会因为找不到 Bash 环境而报错。
思路:在 Bash 里启动现代 Shell。
三大现代 Shell 哪家强?
这三者各具特色,可以根据口味选择:
🐟 Fish
(Friendly Interactive SHell) 最省心的“全能选手”
特点:开箱即用。自带语法高亮、智能补全(基于你的历史记录和 Man 手册)、非常漂亮的颜色。
评价:最好上手。 如果你不想折腾配置,只想装上就变强,Fish 是首选。
缺点:虽然从 4.0 开始重写了部分引擎,但它依然不是 POSIX 兼容的(例如 VAR=val cmd 这种写法在旧版 Fish 中不支持)。
🦀 Nushell
(Nu) 像 SQL 一样处理数据的“未来派”
特点:万物皆对象。在 Nu 里,ls 返回的不是一串文本,而是一个表格。你可以直接用 ls | where size > 10mb 这种语法。
评价:最极客、最好玩。 它不仅仅是 Shell,更像是一个现代化的数据处理工具。如果你经常处理 JSON、CSV 或大批量日志,它会让你爽到飞起。
缺点:学习曲线较陡,有些传统命令的写法需要重新适应。
🧝 Elvish
程序员的“优雅语言”
特点:它试图把 Shell 变成一种真正的、强大的编程语言。支持复杂的结构(Map、List),甚至有自己的包管理器。
评价:最稳健、逻辑最严密。 适合那些觉得 Bash 脚本语法很“阴间”并希望用现代编程思维写脚本的人。
缺点:社区生态相对小一些。
Tips
Nushell 和 Elvish 都是跨平台的,意味着可以在 Windows、macOS、Linux 上获得一致的体验。Fish 的话我只在 Linux 上用过,没有研究其他系统是否能用。
Fish
安装 Fish
# Ubuntu/Debian
sudo apt update && sudo apt install fish -y
安装 Fisher (插件管理器)
这是目前最好用的工具,建议先装上它,在 fish 里执行以下命令:
curl -sL https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish | source && fisher install jorgebucaran/fisher
配置启动逻辑
在 ~/.bashrc 文件末尾添加以下逻辑:
# 检查是否是交互式会话,且目标 shell 存在
if [[ $- == *i* ]] && command -v fish >/dev/null 2>&1; then
exec fish
fi
[[ $- == \*i\* ]]: 确保只在交互式命令行(你手动操作时)触发。如果是不带终端的脚本运行,它不会启动,避免弄断自动化流程。
exec: 这个词很关键。它会用新进程替换当前进程,这样当你退出 fish 时,连接会直接关闭,而不是退回到一个空白的 bash。
推荐几个好玩的插件/主题
安装好 Fisher 后,可以直接运行命令安装这些提升体验的神器:
Pure (简洁美观的主题) fisher install pure-fish/pure 这是一个非常干净、现代化的 Prompt 主题,显示效果极佳。
Done (任务完成提醒) fisher install franciscolourenco/done 如果你运行了一个耗时很长的命令(比如编译、备份),当它结束时,即使你在看别的窗口,它也会发个通知提醒你。
Bass (兼容 Bash 脚本) fisher install edc/bass 这个对你最重要! 因为 Fish 不兼容 Bash 语法,如果你需要运行 source /etc/profile 这种命令,在 Fish 里会报错。装了 Bass 后,你可以写成 bass source /etc/profile,它会帮你搞定兼容性。
小技巧
Web 界面配置:在 Fish 终端输入 fish_config。它会自动弹出一个浏览器网页,让你用鼠标点点就能修改配色方案和函数,非常直观。
智能补全:Fish 的补全基于你的历史记录。当你输入一个命令的前几个字母,它会灰显显示建议,按 右方向键 (→) 或 Ctrl + F 就能直接填入。
我全都要
Nushell (Nu)
数据处理的“降维打击”
Nushell 是目前社区讨论度最高、最硬核的现代 Shell。它的核心逻辑是:一切皆结构化数据。
为什么它好玩?
在传统的 Shell 里,ls 输出的是一串字符串。如果你想过滤文件大小,你得用 grep、awk、cut 去苦哈哈地切分字符串。 在 Nushell 里,ls 输出的是一个内存中的表格。
体验一下:
ls | where size > 10mb | sort-by type
它会像 SQL 一样直接过滤出大于 10MB 的文件并按类型排序,输出的还是整齐的表格。
处理 JSON/YAML 神器: 如果你有一个 config.json,在 Nu 里只需要:
open config.json | get database.port
它直接就把值取出来了,完全不需要安装 jq。
安装
https://www.nushell.sh/book/installation.html
Nushell 是用 Rust 写的,非常快。可以直接下载二进制文件或者通过包管理器。
wget -qO- https://apt.fury.io/nushell/gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/fury-nushell.gpg
echo "deb [signed-by=/etc/apt/keyrings/fury-nushell.gpg] https://apt.fury.io/nushell/ /" | sudo tee /etc/apt/sources.list.d/fury-nushell.list
sudo apt update
sudo apt install nushell
Elvish
程序员的“瑞士军刀”
Elvish (精灵语) 走的是极致稳健和编程友好路线。它的作者是华裔开发者 Qi Xiao,设计哲学非常严谨。
为什么它好玩?
不会崩的管道:在 Bash 里,管道传输的是字节流;在 Elvish 里,管道可以传输复杂的数据结构(列表、字典)。
自带文件管理器:按 Ctrl+R 搜索历史记录的界面非常华丽;按 Ctrl+L 会进入一个类似 ranger 的浮动文件导航模式,直接在 Shell 里选文件。
语法极度统一:它彻底抛弃了 Bash 那些零碎的语法(比如 [ 和 [[ 的区别),它的脚本写起来就像是在写一种现代编程语言。
安装
https://elv.sh/get/package-manager.html
sudo apt install elvish
配置启动逻辑
在 ~/.bashrc 里做一个选择器。
每次登录都会询问要用哪个 shell (要我说就是 fish 好了,开箱即用)
# 交互模式下询问你想进入哪个宇宙
if [[ $- == *i* ]]; then
echo "Choose your shell: [1] Fish [2] Nushell [3] Elvish [Any] Stay in Bash"
read -n 1 -p "Select: " choice
echo
case $choice in
1) exec fish ;;
2) exec nu ;;
3) exec elvish ;;
*) echo "Welcome back to Bash." ;;
esac
fi
