mirror of
https://github.com/feigeCode/navop.git
synced 2026-09-22 08:01:27 +00:00
bash 分支把 PROMPT_COMMAND 注册成裸函数名。PROMPT_COMMAND 是 shell 局部机制, 但它的值可能被环境导出并被后续 shell(su、tmux、exec bash、嵌套 ssh)继承, 而那些 shell 里没有本文件定义的函数,于是每个提示符都多输出一行 「bash: __onetcli_precmd_bash:未找到命令」,即 issue #217 的现象。 - 钩子改为自带存在性判断的命令串:`command -v` 是内建命令,函数缺失时静默跳过、 不产生 fork,也不受继承链路影响; - 退出码必须在钩子里先取好再显式传给函数:钩子里的 `command -v` 会覆盖 `$?`, 若仍让函数自己去读 `$?`,上报的 exit code 会恒为 0、`133;D` 失效; - 补两个回归测试:继承钩子但没有函数的 shell 必须静默、主 shell 退出码必须仍上报; - 设计文档记录该约束,避免以后被简化回裸函数名。 验证:`cargo test -p terminal`(503 lib 测试通过)、 `cargo clippy -p terminal --all-targets`(改动文件零告警);另在真实交互式 bash 中 对比复现:修复前子 shell 输出 2 行 command not found,修复后 0 行, 主 shell 的 `133;D` 退出码上报仍为 `false`→1、`true`→0。