Skip to content

Releases: unixwin/rubash

v1.4.3

Choose a tag to compare

@github-actions github-actions released this 22 Oct 08:22

What's Changed

Full Changelog: v1.4.2...v1.4.3

v1.4.2

Choose a tag to compare

@github-actions github-actions released this 21 Oct 12:47
25b0850

What's Changed

Read more

v1.4.1

Choose a tag to compare

@github-actions github-actions released this 19 Oct 08:10
45f537e

rubash 1.4.1

1.4.1 是 1.4.0 的健康重发:1.4.0 的发行资产曾被审计发现构建自浮动克隆的错误源码状态(#827)——1.4.1 起发行链把引擎源锁到精确 commit(失配即失败),脏构建会在 niu --version 里自曝。建议所有 1.4.0 用户升级。

行为修复(引擎)

  • ERR trap 嵌套语义:嵌套子壳过火/扁平函数体欠火/return 归因三面与 GNU bash 5.3 逐字节一致(#720,17 例差分回归)
  • patsub 替换文本转义:替换文本中的用户 PUA 字符不再与内部标记碰撞(v=abc; r="${v/b/$'\uE312x'}" 类形态修复)(#843)
  • 下标 ANSI-C 双态法则:$'...' 在双引号内不再被错误解码;unset 的带引号下标操作数按 GNU 引号移除语义解析(#847)
  • pushd/popd:readonly OLDPWD/PWD 检查对齐 GNU(失败栈不弹 rc 1);越界报错引用真正越界的词(#844/#848)
  • ${var@P}:prompt 变换不再泄漏命令替换状态到后续 $?(#813)

工程与发布

  • 发行 tag 自动化扩展到补丁版(此前 x.y.1+ 无自动化通道);crate 包增加构建变体目录护栏(#851/#862/#863)
  • 快照真相钉死:GNU bash 自身竞态(nameref)与交互续行语义的回归锚(#845/#852)

质量

  • 全量 GNU 上游 83 套语料持续 100% 通过(82 套逐字节一致);每项修复带双向差分证据与独立代码评审

完整变更清单见仓库 CHANGELOG 与各 issue/PR。1.4.0 → 1.4.1 的引擎语义差异同步进入 niubash 1.4.1(下个发布)。

v1.4.0

Choose a tag to compare

@github-actions github-actions released this 13 Oct 11:35
f69e790

What's Changed

  • fix(env): skip invalid-identifier env names like GNU bash 5.3 (niubash #102) by @caomengxuan666 in #106
  • fix(xtrace): complete G16 - single raw (( )) trace, for/case heads, assignment prefix by @caomengxuan666 in #107
  • fix(assignment): restore \x18 escaped-quote carrier in quoted-assignment fast path (niubash #103) by @caomengxuan666 in #108
  • fix: land local master batch — heredoc warnings, arithmetic messages, ifs multibyte, printf locale, raw-byte markers, let $var by @caomengxuan666 in #110
  • fix: niubash #106/#107/#108 regressions + restore #103 array fix lost in rescue merge by @caomengxuan666 in #111
  • fix(cli): expand bundled short options containing -l/-i with -c by @caomengxuan666 in #112
  • fix(eval): render the data-double-quote marker back to source before re-parsing by @caomengxuan666 in #114
  • fix(capture): strip a CRLF terminator from command-substitution output (niubash #120) by @caomengxuan666 in #115
  • fix(lexer): 函数定义/花括号组同行 # 尾注释解析失败(#118) by @caomengxuan666 in #119
  • test(executor): pin GNU exit-unwind semantics through AND-OR lists by @daiaji in #122
  • fix(executor): cmdsub child drops inherited fd-1 binding by @daiaji in #123
  • fix(utf8): stop widening payload bytes in [[ =~ ]] RHS and compound xtrace by @daiaji in #124
  • chore: bump to 1.2.1 by @caomengxuan666 in #366
  • fix: sync Cargo.lock to 1.2.1 by @caomengxuan666 in #367
  • fix(windows): preserve backslashes before quotes in forced-quoted argv by @I-Want-ToBelieve in #442
  • fix(windows): normalize prefix TMPDIR at native child boundary by @Uarz in #446
  • ci: community bots — stale 清扫(豁免 P0/P1)+ 首次贡献者问候 by @caomengxuan666 in #450
  • fix(cat): open the redirect target once in the streaming cat paths by @bbvdf in #447
  • fix(ulimit): compile against musl and OpenHarmony libcs by @caomengxuan666 in #449
  • fix(parser): 赋值前缀 + 子 shell — GNU 形态(审计语料 #452 集群1) by @caomengxuan666 in #453
  • complete: accept dashed function names in -F (fixes #427) by @caomengxuan666 in #454
  • fix(executor): broken-pipe writes no longer abort the interpreter (rubash#440) by @caomengxuan666 in #455
  • fix(android): compile against bionic for aarch64/armv7 android targets by @caomengxuan666 in #456
  • test(source): pin sourced exit N shell-termination semantics (rubash#426) by @caomengxuan666 in #457
  • fix(input): normalize C0 control bytes on bridge-delivered interactive lines by @caomengxuan666 in #458
  • test(parser): pin GNU semantics for tokens on the function-definition brace line (rubash#443) by @caomengxuan666 in #459
  • test(parser): pin #424 redirect-target rejection and procsub input-side regressions by @caomengxuan666 in #464
  • fix(executor): keep quoted whole-word default expansions one compound element by @caomengxuan666 in #466
  • fix(trap): do not fire the ERR trap for word/assignment expansion errors by @caomengxuan666 in #467
  • fix(executor): pass process-substitution fds to external command arguments on Unix by @caomengxuan666 in #468
  • fix(executor): coproc 子进程继承父函数表快照,DEBUG trap 函数可解析 (fixes #441) by @caomengxuan666 in #469
  • ci: greet 输入改 snake_case,first-interaction 真正生效(镜像 niubash#224) by @caomengxuan666 in #470
  • ci: greet 输入改 snake_case,first-interaction 真正生效 by @caomengxuan666 in #471
  • fix(path): translate /mnt/X drive argv for every child class (niubash#164) by @caomengxuan666 in #444
  • fix(lexer): nested keyword-form function bodies count as group openers in skip_brace (fixes #465) by @caomengxuan666 in #472
  • fix(parse): =~ regex word fragments are word data, never reserved words (fixes #461) by @caomengxuan666 in #473
  • fix(lexer): raw-byte tag a word-initial data ESC (niubash#200) by @caomengxuan666 in #474
  • fix(parser): accept terminator-less then/do after ]] and (( )) in compound bodies by @caomengxuan666 in #475
  • fix(parser): accept function-def name words containing unquoted $( ) (#462) by @caomengxuan666 in #476
  • docs: 归档过时状态快照文档(7 个)+ CHANGELOG 补 #455/#456/#458 by @caomengxuan666 in #478
  • fix(prompt): strip [ ] ignore-markers on every PS1 render path by @caomengxuan666 in #480
  • fix(source): source 边界上的语法错误中止降级为 reader discard,不再终止会话(#451 类 B) by @caomengxuan666 in #481
  • feat(repl): raw-console readline editing for the standalone interactive shell (rubash#419 readline leg) by @caomengxuan666 in #482
  • lexer: join lines while a word-attached procsub body is open (fixes #463) by @caomengxuan666 in #483
  • perf(executor): single-handle cd/pwd comsub path resolution (rubash#375) by @caomengxuan666 in #484
  • perf(lexer): opener-state checkpoint - fold passes resume from the bare { (rubash#281) by @caomengxuan666 in #486
  • feat(startup): login shell chain /etc/profile -> ~/.bash_profile family (#487) by @caomengxuan666 in #489
  • feat(cli): --version appends build hash/profile and a Windows persona note (rubash#488) by @caomengxuan666 in #490
  • fix(executor): propagate command-substitution status to in-word $? (rubash#485) by @caomengxuan666 in #491
  • audit(platform-cfg): full platform-gate inventory; fix android signal-table legs (kill/trap) by @caomengxuan666 in #492
  • fix(executor): comsub reap publishes its status to $? before the enclosing command runs (rubash#485) by @caomengxuan666 in #494
  • docs: README style pass (minimal, fact-preserving) by @caomengxuan666 in #495
  • chore(release): prepare 1.4.0 — version bump, CHANGELOG, packaging slim-down, release notes draft by @caomengxuan666 in #498
  • tests/regression: re-baseline stale suite snapshots + airtight snapshot env + CI golden-refresh artifact by @caomengxuan666 in #496
  • cross-platform: gate residual Windows assumptions outside cfg(windows) + stale doc claims by @caomengxuan666 in #499
  • docs(readme): evidence-first restructure with cross-platform identity (EN+zh) by @caomengxuan666 in #500
  • perf(executor): hot-path residue — test marks gate, word materialization once, assignment scan admission (rubash#242) by @caomengxuan666 in #501
  • docs: repoint deleted COMPATIBILITY-STATUS.md references to the current ledger by @caomengxuan666 in #502
  • docs(ledger): GNU suite 83/83 — nameref residual proven to be GNU's own coproc reap race by @caomengxuan666 in #506
  • [P0] fix(#511): cat inline path re-expands already-expanded argv - silent wrong-file read by @caomengxuan666 in #552
  • fix: four P1-high semantic divergences - errexit body adjudication, stdin parse-error status, printf write-failure status, dirstack EX_USAGE by @caomengxuan666 in #553
  • fix(pwd): PWD family unconditionally POSIX // form — retire the native-PWD style hatch (#537) by @caomengxuan666 in #556
  • fix(#553): compound's own failed redirection fires ERR again - unblock redir snapshot by @caomengxuan666 in #557
  • [P0] fix(#555): mkdir/touch/cp/rm/rmdir re-expand already-expanded argv - silent wrong-path corruption by @caomengxuan666 in #558
  • perf(lexer): parse-throughput construction wins - fold-before-push, gated leading_ws capture, TokStr reader state (rubash#241) by @caomengxuan666 in #554
  • fix(shim): forward the sh invocation name so the host honors its GNU contract by @caomengxuan666 in #504
  • fix: Wave2a shell semantics batch - SIGQUIT policy ignore, -r entry via -s, readonly attr refusal, declare -na shape wins, ERR single-fire guard by @caomengxuan666 in #560
  • P1 Wave1: six semantic fixes (#524 #525 #529 #532 #535 #536) — trap exit unwind, pipeline redirect failures, indirect declared-unset, runtime bad substitution, redirect-word nounset, malformed subscripts by @...
Read more

v1.2.0

Choose a tag to compare

@github-actions github-actions released this 15 Sep 10:10

What's Changed

  • fix(exec): capture external child stdout inside builtin pipeline stages (niubash#93) by @caomengxuan666 in #102
  • fix(path): /tmp and /var/tmp resolve to per-user temp even with shell root by @caomengxuan666 in #103
  • fix(expansion/pipeline/invocation): four fast-path fidelity bugs found via differential testing vs GNU bash by @SuperYogurt in #101
  • fix(comsub): keep fragment bytes byte-exact through field materialization (niubash#92 follow-up) by @caomengxuan666 in #104
  • docs(readme): sync compatibility numbers to the 2026-09-14 ledger by @caomengxuan666 in #105

New Contributors

Full Changelog: v1.1.0...v1.2.0