Nushell

每条命令的输出都是表格,用统一的管道算子筛选、排序、聚合——像操作数据库一样操作命令行


项目速览

项目 内容
仓库 nushell/nushell
语言 Rust
平台 Windows / macOS / Linux,行为一致
协议 MIT
安装 Homebrew / Cargo / 官方脚本 / 各平台二进制

它想解决什么问题

传统 Unix Shell 把一切都当作文本。于是”找出当前目录最大的五个文件夹”这种问题,最终会变成 ls -l | awk '{print $5, $9}' | sort -rn | head -5 这样的正则与字段位置赌博——字段一变,管道就崩。

Nushell(nu)的思路是把这条假设换掉:让每条命令的输出都是结构化数据(表格),再用统一的算子去筛选、排序、聚合。数据带着列名和类型在身上走,而不是一串等待被切片的字符。

核心机制拆解

1. 结构化输出。 ls、ps、date 等命令返回的是表格而非纯文本,可以直接 where、sort-by、group-by。上面那个需求在 nu 里是一行:

1
ls | where type == "dir" | sort-by size | reverse | first 5

2. 统一的管道语法。 ls | where size > 1mb | sort-by size | reverse 这类写法直观且可组合——管道两端传的是同一类东西,所以任意两段都能接。

3. 原生解析能力。 内置 from json / csv / toml / xml 与 open 等命令,把文件与命令输出无缝转换;还能直接解析 xlsx、ods 等表格文件。这一层是把”外部世界”接进结构化管道的关键。

4. 跨平台一致。 在 Windows、macOS、Linux 上行为一致,绕开了传统 Shell 脚本最难缠的平台差异——同一段脚本三处都能跑,这在 Windows 上尤其值钱。

5. 插件体系。 通过 nu_plugin_* 扩展能力,例如 query web 基于浏览器解析网页、from xlsx 基于 calamine 读 Excel。能力边界可以自己推。

安装与上手

1
2
3
4
5
6
7
8
# Homebrew(macOS/Linux)
brew install nushell

# Cargo
cargo install nu

# 官方脚本
curl -sSf https://www.nushell.sh/install.sh | sh

装完先试两条,手感立刻不一样:

1
2
ls | where type == "dir" | sort-by modified | reverse | first 5
ps | where cpu > 1.0 | sort-by mem | reverse

点评

亮点是把”数据优先”贯彻到了管道语义层面:不是给 bash 加语法糖,而是换掉了”文本流”这个底层假设。一旦输出带结构,脚本的可读性与可维护性会有台阶式提升——尤其是需要做轻量数据分析时,不必为了几行聚合去写 Python。

局限要说清楚:它不是来取代 bash/zsh 当系统默认 Shell 的,启动开销与”每条命令都走自己的解析器”的设计,让它更像交互式数据处理环境;生态上,绝大多数第三方 CLI 输出的仍然是文本,得靠 from 系列手工转换;把团队既有 bash 脚本迁移成 nu 是实打实的重写成本,不是改几行;Windows 下部分原生工具的参数约定仍与 *nix 有差异,需要适配。

适合人群:想在命令行里做轻量数据分析又不想开 Python 的人;需要写跨平台可移植自动化脚本的工程师;以及受够了”文本流 + 正则”脆弱解析、希望脚本半年后还读得懂的人。

它也许不会成为你的登录 Shell,但很可能成为你处理数据时的那一层。