niubash

AI-native 的真·Bash:真语法、真 Unix 命令、原生 Windows / Linux / macOS。 一个 niu.exe 打包语言引擎(rubash)、真实 Unix 命令(WinuxCmd)、git 感知提示符与带信任模型的插件系统; 不是 MSYS2、Cygwin、Git Bash,也不是 WSL——没有 POSIX 模拟层,没有路径转换启发式。

Rust Windows · Linux · macOS stable v1.4.4

github.com/unixwin/niubash ↗ · Star 188 · 最新版本 v1.4.4(repo-meta 实测 2026-10-24)

为什么是 niubash

在 Windows 上写 Bash 的人只有几种命运:装一整个 MSYS 模拟层(Git Bash,440 MB + 一条会改写你参数的 msys-2.0.dll)、开一台 Linux 虚拟机(WSL,路径两边倒)、或者放弃 Bash 改学 PowerShell 的动词名词方言。 niubash 的答案是第四条路:从零写的 Rust 引擎直接执行 bash 语法,主战场原生 Windows, 同一份代码在 Linux 与 macOS 上作为可移植二进制发布。

它能跑真插件、真脚本、真 dotfiles,靠的不是移植 GNU 代码,而是把兼容性当工程对象: 每一个行为主张都要对 vendored GNU bash-5.3 源码给 file:line 坐标,每一处差异都要双向差分到字节级。

零 fork:三层执行模型

POSIX fork() 在 Win32 没有等价物,MSYS2/Cygwin 只能在 syscall 层伪造它。niu 的引擎 rubash 复刻 fork 的语义而非机制:子壳与命令替换在进程内完成,脚本可观察的一切——退出码、fd 继承、共享偏移、信号处置——与 GNU Bash 一致。命令替换类负载实测 13–62x 快于 GNU bash。

无 MSYS:argv 永不改写

Git Bash 的 MSYS 运行时会在 spawn 前启发式改写「看起来像路径」的参数,每个老用户都被迫学会 MSYS_NO_PATHCONV 咒语——这两个环境变量的存在本身就是官方承认问题的证据。niu 没有 MSYS 运行时:参数进什么,命令就收什么,无咒语可念。

四大生态的路径方言全收

Windows 原生(D:\repo、D:/repo)、MSYS/Git Bash 形(/d/repo、/tmp、/usr/bin)、WSL 形(/mnt/d)、Cygwin 形(/cygdrive/d)全部接受且真折叠——既有脚本零修改。对照探针证明 Git Bash 的 /mnt/d 会静默落到安装根(假阳性地雷),而 niu 真折叠(pwd -P=/d/repo)。

兼容性是测出来的,不是宣称的

对 GNU Bash 自己的 83 套上游语料做 true-baseline 双向测量:83/83 通过、82 套逐字节一致,唯一残差被逐字节证明是 GNU Bash 自身的 coproc 回收竞态。另外全网 2686 仓 / 9701 资产每夜巡检,6336 条真实资产判定原文入仓可回放。

路径方言实测矩阵随审计包附上(PATH-MATRIX.md,约 100 条 PS 原生 argv 探针逐格实跑); 执行模型细读见 执行模型:零 fork 三层, 路径差异见 路径与 MSYS。

核心特性

真·插件生态:上游 BASH 插件直接跑

oh-my-bash、bash-it、bash-completion、bash-preexec 这些真实世界的 BASH 资产,源码一行不改就在 niu 里原生运行——没有 MSYS、没有 Cygwin、没有 WSL。bash-completion 3796 行完整 source rc=0 曾是发布阻塞,如今是端到端门禁的一环。

为 agent 而设的旗标面

niu --encoded-command <base64> 给 agent/CI 一条免引号通道(RFC 4648 载荷走与 -c 完全相同的一次性路径,可选 v1: 前缀防 MSYS 路径改写);niu --cwd-state <file> 让链式一次性调用共享目录记忆——表现为同一个 shell,不加旗标字节级零变化。

AI agent 接入:$SHELL 即机制

niu 导出 $SHELL,遵循 POSIX 约定的 agent(如 opencode)从 niu 会话启动即用、零配置;安装器还在探针路径布放 bash 启动器命中 Claude Code 的第一探针。每个 agent 的接入方式与验证命令见站内 Agent 目录。

内联命令与编译进壳的补全

pwd、printf、cat、sed、mkdir、touch、chmod、cp、rm 等 12 个高频文件命令在引擎内联执行,echo | cat 全程零进程;178 个 WinuxCmd applet 的真实旗标补全编译进 shell,零插件即有 git/tar/curl/docker/kubectl 等常用命令的静态补全层。

wpm 联动:命令即包

Winux 包管理器 wpm 随 WinuxCmd 内建,rg / fd / bat / jq / node 等 Unix 工具一条 wpm install 到位;Windows 发行包预装 gawk、niu-git、ripgrep、fd,bash-it 插件依赖的 awk 开箱即用。

git 感知的快速提示符

默认提示符读 .git/HEAD 文件(微秒级)渲染分支与脏标记,不再像 Git Bash 那样每条提示符 spawn git 子进程(实测 113–362ms);仓库外连 stat 都省掉。视觉对齐 Git Bash 骨架,但明确不做 MINGW64 身份段。

输入管线做到字节级

多行粘贴自动误执行 186 次 → 0,257 行载荷 300s 超时 → 4.6s;ConPTY 粘贴丢字符、typeahead 吃键、控制台 read 三面(-t 门饿死 / conhost 预煮劈半行 / ICRNL)逐项与 GNU 行为对齐,每项带双向差分证据。

控制台设备重定向:Git Bash 报错的地方 niu 照跑

echo >/dev/tty、exec 3<>/dev/tty、test -e /dev/tty 在 niu 里与 GNU 行为一致;同一组命令在 Git Bash 的 MSYS 层直接报 Invalid argument。引擎把 /dev/tty 映射到控制台并把 CON 拆成 CONIN$/CONOUT$ 两端,绕开 Windows 对设备的 FILE_APPEND_DATA 与读写句柄拒绝——git/ssh 的 askpass 密码提示正依赖这条路。

跨平台到 CI 腿:三个发布平台,六个发布目标

Windows x64/ARM64、Linux x86_64/aarch64、macOS aarch64/x86_64 六个目标已发布且每次发布冒烟四查(--version、-c 执行、经原生 coreutils 的管道、离线插件栈)才允许上传;Android 双目标是 incubating 的 NDK 构建腿(zip 只随 CI workflow 产出、不入发布档、无运行时冒烟),OpenHarmony 仅 CI 编译检查。各平台的诚实状态矩阵见平台支持文档。

安装与快速上手

Windows 首选 winget(微软官方源,清单自带 InstallerSha256 校验):

winget install --id Unixwin.Niubash --source winget

或一行 PowerShell 脚本(安装器免管理员权限,布好 PATH 与 Windows Terminal profile;脚本内置 SHA256 校验):

irm https://unixwin.dev/install.ps1 | iex

Windows 装完即有完整命令层:安装器自带完整 WinuxCmd root(176 个 Unix 命令与内建包管理器 wpm,落在 {app}\winuxcmd\,PATH 指向 winuxcmd\bin),发行包并按 preinstall.json 预装 gawk(含 awk shim)、niu-git、ripgrep、fd——PATH 上的 git 即原生 git(~14 ms);其中仅 gawk 为 x64 资产;ARM64 安装同样预装 niu-git / ripgrep / fd。

Linux / macOS 取可移植 tar.gz 解压即用:

tar -xzf niubash-v*-linux-x86_64.tar.gz && niubash-v*-linux-x86_64/niu

从源码构建(Rust 1.95+):

git clone https://github.com/unixwin/niubash.git && cd niubash && cargo build --release

首次运行 niu 会进入设置向导:提示符主题、补全风格、字体检测逐项可选, 生成纯 bash 语法的 ~/.niubashrc——之后一切配置就是这一个文件。

深入:AI 集成、插件系统与提示符

AI 集成

agent 的高频调用面是一次性 -c,niu 为此做了三件事。其一,快路径:跳过 REPL 专属初始化,niu -c true 的冷启动地板从 105.6 ms 一路压到 26.3 ms (一次性快路径六连 PR;29 例行为电池零差异)。 其二,免引号通道 --encoded-command:base64 载荷免掉跨进程引号转义, 与 -c 同路径、同 BASH_EXECUTION_STRING 契约。其三,目录记忆 --cwd-state:agent 按工作区各配一个状态文件,链式调用即共享 cwd。

会话级接入更简单:从 niu 会话启动的 agent 直接拿到 niu 导出的 $SHELL—— 遵循 POSIX 约定的 agent(opencode 等)零配置采用;Claude Code 的第一探针路径由安装器预置 bash 启动器命中。逐家 agent 的机制、难度与回滚命令见 AI Agent 接入目录;给 agent 的一键安装提示词与 skill bundle 安装见 给 AI 的门户。全部旗标语义见 CLI 与旗标参考。

插件系统

外部 bash 生态走「先装、后审、再信」:niu plugin add 克隆源(新源默认不受信, add 后不执行任何内容),niu plugin trust 审阅校验和后放行, niu plugin enable 在 rc 尾部维护托管块——块外内容永不改写。 声明式 spec(~/.niubash/plugins.toml)是唯一事实源, sync / restore / rollback 一族动词带 lockfile 锁定,镜像(niu plugin mirror) 对国内网络友好。运行时信任层会复验 pin:树被改动后读 drift 而非撒谎的 unchanged。

提示符

默认提示符是 Git Bash 骨架(绿 user@host、黄 POSIX 形态 cwd、青分支 + 脏星), 但分支段读 .git/HEAD 文件而不是 fork git——这是「提示符永不 spawn」红线的产物, 实测冷 39 ms / 暖 p50 2.5 ms,对照 Git Bash 每提示符 __git_ps1 的约 100–300 ms。 PS1 / 主题声明照常接管,set -o vi 的编辑模式指示器保留。

实测数字

每条为真机实测、可复现,基准脚本随仓附上;完整对比见 基准页。

指标niu对照来源
一次性执行 niu -c true 26.3 ms(优化前 105.6 ms,一次性快路径六连 PR) Git Bash 71 ms GITBASH-KILLER 面 6 · niubash PR #267–#272
提示符 git 段 读 .git/HEAD ≤29 ms 每条提示符 spawn git 113–362 ms GITBASH-KILLER 面 3(真仓 min-of-20)
安装体积 niu ≈16 MB,零 DLL Git Bash 440 MB + 20 MB msys-2.0.dll GITBASH-KILLER 面 4(装机位实测)
多行粘贴 自动误执行 186 次 → 0;257 行 300s 超时 → 4.6s — niubash PR #252/#288 · paste_multiline_bench.py
workspace 单测 1026 通过 / 0 失败 — CI run 39191023176(FACTS.json)

更新动态

版本日期摘要
v1.4.4 2026-10-22 携带 rubash 1.4.3 引擎:ping/netstat/tracert「command not found」根修(System32 大写盘上名 PING.EXE 的 command-stem 大小写折叠);${v^^} 交互崩溃修复;WinuxCmd v1.1.20 pin;MSIX 外来环境加固。
v1.4.3 2026-10-21 winget 官方源上架(Unixwin.Niubash);交互多行组不再楔死 REPL;vendored bash 升至 patch 20;-EncodedCommand 全拼写;安装面加固。
v1.4.2 2026-10-20 无窗父进程闪控制台窗根治(WinuxCmd shim v1.1.18 + 引擎侧抑制);x64 预装腿 fail-closed;gawk 预装 404 根修。
v1.4.0 2026-10-10 Git Bash 兼容默认提示符(读 .git/HEAD,不 spawn git)、--encoded-command 与 --cwd-state、vi 模式端到端、agent skill bundle、发布包预装 gawk/niu-git/ripgrep/fd。
v1.3.4 2026-10-05 主题选择在 source 与新终端下存活;多行主题光标落位修复;178/178 WinuxCmd applet 补全内嵌;金色用户旅程成为发布门禁。
v1.3.3 2026-10-04 PROMPT_COMMAND 探针吃首键修复(typeahead guard);tr 管道选项修复;解析吞吐 +13%(nvm GNU 比例 18.0x → 15.6x)。

取自 changelogs.json(niubash 仓 CHANGELOG.md)最新 3 个已发布版本;完整流水见 更新日志。

站内

站外

常见问题

niubash 和 Git Bash / WSL 有什么区别?

niubash 是 Rust 写的原生 Windows 程序:不捆绑 MSYS 模拟层,也不需要 WSL 虚拟机。Git Bash 在 spawn 前会启发式改写「看起来像路径」的参数(这正是 MSYS_NO_PATHCONV 咒语存在的原因),niu 的 argv 逐字节原样抵达;安装后全家族约 16 MB,Git Bash 约 440 MB。

用 niubash 需要装 WSL 或 MSYS 吗?

不需要。bash 语义由 Rust 引擎 rubash 直接执行,Unix 命令由 WinuxCmd 原生提供(176+ 命令),Git 由 niu-git 原生提供——全部是原生二进制,零 DLL 依赖,shell 不含任何遥测。

「83/83 GNU 套件」是什么意思?

GNU Bash 上游自带的 83 套测试语料在真机 Windows 上全部通过,其中 82 套输出与 GNU Bash 5.3 逐字节一致;唯一残差(nameref 1 行)被逐字节证明是 GNU 自身的 coproc 回收竞态。兼容性是测出来的:另有 2,686 个真实生态仓 / 9,701 个资产每夜巡检。

怎么把 Claude Code / Cursor 等 agent 的 shell 切到 niubash?怎么回滚?

打开 Agent 目录(/agents/):24 个主流 agent 各有一页,含可复制的换壳脚本、真实验证命令(echo "SHELL=$SHELL"; uname -s)与回滚步骤。AI 用户也可以直接把 /ai/ 的安装提示词粘给 agent,由 agent 自己完成安装与接入。

免费吗?支持哪些平台?

全部开源免费。niubash 提供 Windows x64 / arm64 原生安装包(winget:Unixwin.Niubash);引擎 rubash 另有 Linux(gnu/musl)、macOS、Android 与 OpenHarmony 五平台的 CI 门禁构建。

性能怎么样?

一次性执行(niu -c true)经专项优化后 19.8ms;niu-git 启动约 14ms(Git Bash 45–103ms);命令替换与子壳类负载比 GNU bash 快 13–62x。全部数字附实测方法与复现产物,见「基准测试」(/benchmarks/)。

niu 和 niubash 是什么关系?

niu 是 niubash 的可执行程序名(winget 安装后命令就叫 niu)。家族分工:引擎层 rubash(可嵌入的 Bash 5.3 兼容引擎)、命令层 WinuxCmd、Git 是 niu-git、包管理器是 wpm、主题框架是 oh-my-niu。