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 这类小众领域仍然吃力。