开源项目 Nushell:把 Shell 变成结构化数据管道,不再和字符串搏斗
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 | # Homebrew(macOS/Linux) |
装完先试两条,手感立刻不一样:
1 | ls | where type == "dir" | sort-by modified | reverse | first 5 |
点评
亮点是把”数据优先”贯彻到了管道语义层面:不是给 bash 加语法糖,而是换掉了”文本流”这个底层假设。一旦输出带结构,脚本的可读性与可维护性会有台阶式提升——尤其是需要做轻量数据分析时,不必为了几行聚合去写 Python。
局限要说清楚:它不是来取代 bash/zsh 当系统默认 Shell 的,启动开销与”每条命令都走自己的解析器”的设计,让它更像交互式数据处理环境;生态上,绝大多数第三方 CLI 输出的仍然是文本,得靠 from 系列手工转换;把团队既有 bash 脚本迁移成 nu 是实打实的重写成本,不是改几行;Windows 下部分原生工具的参数约定仍与 *nix 有差异,需要适配。
适合人群:想在命令行里做轻量数据分析又不想开 Python 的人;需要写跨平台可移植自动化脚本的工程师;以及受够了”文本流 + 正则”脆弱解析、希望脚本半年后还读得懂的人。
它也许不会成为你的登录 Shell,但很可能成为你处理数据时的那一层。
评论