现在都用什么现代化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。
阅读全文