Xonsh:由 Python 驱动、跨平台、向 Unix 观望的 shell
一个由 Python 驱动的 shell Xonsh 引发了关于现代、功能丰富的 shell 是否真的能取代 Bash 和 Zsh 这类无处不在的选项的讨论。支持者称赞它能将 Python 与传统 shell 命令混用、编写更易维护的脚本,并且支持跨平台(尤其是在 Windows 上),而批评者则指出不稳定、与常见工具(如 `fzf` 和 ncurses 应用)的不兼容,以及 Python 的依赖管理问题都是严重缺点。讨论也扩展成一个更广泛的问题:开发者应当优先学习 Xonsh、Fish 和 Nushell 这类新 shell 来完成日常工作,还是继续依赖在大多数系统上默认可用的 POSIX 工具。
Xonsh 是什么,以及它面向谁
- 由 Python 驱动的 shell,目标是结合 Python 与传统 shell 语义。
- 被宣传为“Unix‑gazing” / “Bash‑wards compatible”:整体上与 Bash 的 UX 接近,但不符合 POSIX,也不是 100% 兼容 Bash。
- 被认为尤其吸引那些在 Windows 上使用 Unix,希望获得 Bash 风格体验的用户。
优点与正面体验
- 用户表示在 Linux 和 Windows 上日常使用多年,并且“很喜欢”,尽管相较于基于 C 的 shell 会有些慢。
- 对不喜欢 Bash 脚本的人吸引力很强;xonsh 脚本被描述为更清晰,也更可能长期保留。
- 将 shell 命令和 Python 混在同一处是一个关键吸引点(例如快速计算、在管道中使用 Python 逻辑、更干净的 rc 文件)。
- 有些人觉得它足够可配置,使用起来像 zsh,而且不会“多打很多字”。
缺点、稳定性与兼容性
- 一些用户因为频繁崩溃而离开;shell 的稳定性被视为至关重要。一个主要问题来源是 prompt-toolkit 的版本。
- 与 Bash/zsh 工作流的不兼容(例如 fzf 的用法、命令替换中的换行、非标准怪癖)是反复出现的痛点。
- 有些人认为它过于非标准,无法与队友共享命令,也不适合写进 shebang。
- GitHub issue 跟踪器被提到是“用你熟悉的魔鬼更好”的原因之一。
Python 作为基础:担忧与反驳
- 有人担心 Python 的依赖和打包问题会影响 shell 的可靠性。
- 反驳观点是:Bash 根本没有依赖管理;xonsh 本身依赖很少,而在实践中,Python 升级通常只需要快速重新安装一次。
Shell 选择:新与旧
- 讨论的焦点之一是:是投入像 xonsh、nushell、fish、elvish 这样的现代 shell,还是继续使用无处不在的 Bash/Posix。
- 一些人优先考虑可移植性和最少学习成本(到处都能用 bash/sh)。
- 另一些人则主张在自己的机器上优先考虑舒适度和生产力,只在需要时才用 Bash。
替代方案与结构化数据 shell
- 提到的其他“语言嵌入式”或对象/结构化 shell:nushell、marcel、rash、scsh、基于 Tcl 的方案、elvish、murex、rc、Emacs 中的 eshell。
- 人们希望 shell/工具能传递对象或 JSON,而不是文本,拥有标准化、可机器读取的输出,以及内置的参数解析/帮助功能。
LLM 与工作流变化
- 至少有一位用户表示,已在很大程度上用 GPT‑4 替代 xonsh 来做快速脚本和胶水任务,不过也有人指出当前的 LLM 在现代 Nix 这类小众领域仍然吃力。