什么年代了怎么还在用bash啊?现代化shell开箱体验: fish, nu, elvish

前言

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

bash 复制代码
# Ubuntu/Debian
sudo apt update && sudo apt install fish -y

安装 Fisher (插件管理器)

这是目前最好用的工具,建议先装上它,在 fish 里执行以下命令:

bash 复制代码
curl -sL https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish | source && fisher install jorgebucaran/fisher

配置启动逻辑

~/.bashrc 文件末尾添加以下逻辑:

bash 复制代码
# 检查是否是交互式会话,且目标 shell 存在
if [[ $- == *i* ]] && command -v fish >/dev/null 2>&1; then
    exec fish
fi
  • [[ $- == \*i\* ]]: 确保只在交互式命令行(你手动操作时)触发。如果是不带终端的脚本运行,它不会启动,避免弄断自动化流程。
  • exec : 这个词很关键。它会用新进程替换 当前进程,这样当你退出 fish 时,连接会直接关闭,而不是退回到一个空白的 bash

推荐几个好玩的插件/主题

安装好 Fisher 后,可以直接运行命令安装这些提升体验的神器:

  1. Pure (简洁美观的主题) fisher install pure-fish/pure 这是一个非常干净、现代化的 Prompt 主题,显示效果极佳。
  2. Done (任务完成提醒) fisher install franciscolourenco/done 如果你运行了一个耗时很长的命令(比如编译、备份),当它结束时,即使你在看别的窗口,它也会发个通知提醒你。
  3. 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 输出的是一串字符串 。如果你想过滤文件大小,你得用 grepawkcut 去苦哈哈地切分字符串。 在 Nushell 里,ls 输出的是一个内存中的表格

体验一下:

rust 复制代码
ls | where size > 10mb | sort-by type

它会像 SQL 一样直接过滤出大于 10MB 的文件并按类型排序,输出的还是整齐的表格。

处理 JSON/YAML 神器: 如果你有一个 config.json,在 Nu 里只需要:

rust 复制代码
open config.json | get database.port

它直接就把值取出来了,完全不需要安装 jq

安装

https://www.nushell.sh/book/installation.html

Nushell 是用 Rust 写的,非常快。可以直接下载二进制文件或者通过包管理器。

bash 复制代码
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

bash 复制代码
sudo apt install elvish

配置启动逻辑

~/.bashrc 里做一个选择器

每次登录都会询问要用哪个 shell (要我说就是 fish 好了,开箱即用)

bash 复制代码
# 交互模式下询问你想进入哪个宇宙
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
相关推荐
letisgo526 分钟前
VMware Workstation + Ubuntu 26.04 LTS 小白运维部署手册
linux·运维·ubuntu
IT探索39 分钟前
Linux 查找文件指令总结
linux·算法
晚风吹长发41 分钟前
Docker使用——Docker容器及相关命令
linux·运维·服务器·docker·容器·架构
sulikey1 小时前
个人Linux操作系统学习笔记11 - 环境变量
linux·笔记·学习
Kina_C1 小时前
NFS与Autofs快速讲解-从原理到实战配置
linux·nfs·autofs
皮卡狮1 小时前
文件系统:磁盘硬件寻址和系统软件寻址
linux
是潮汕的灿灿展吖2 小时前
Centos离线部署nfs操作
linux·运维·centos
Kina_C2 小时前
Apache HTTP Server 安装、配置与高级功能详解
linux·http·apache
治愈系贝壳2 小时前
ARM --- day 6 时钟
linux·arm开发·学习
Molesidy2 小时前
【GUI】【AWTK】基于开阳平台的GUI界面设计环境搭建
linux·gui·awtk