当前位置: 首页 > news >正文

Gum:让 Shell 脚本拥有交互界面

文章目录

  • Gum:让 Shell 脚本拥有交互界面
    • 能干什么
    • 实际用起来什么样
    • 定制化程度高
    • 安装和使用
    • 适合谁

Gum:让 Shell 脚本拥有交互界面

写 Shell 脚本最头疼的是什么?不是逻辑,是交互。你想让用户选个选项、输个密码、确认个操作,要么用 read 凑合,要么弹个丑陋的默认提示。Gum 这个工具就是来解决这个问题的。

Gum 来自 Charm 团队,Go 语言写的,Star 数已经到了 2.4 万。它的定位很明确:给 Shell 脚本加上好看的交互组件,不用写一行 Go 代码。

能干什么

Gum 提供了十几个子命令,覆盖了脚本交互的常见场景:

选择类choose让用户从列表里选一个或多个,filter支持模糊搜索过滤,file弹出文件树让你挑文件。

输入类input单行输入,支持密码模式;write多行文本输入,Ctrl+D 结束。

确认类confirm弹个确认框,返回 0 或 1,直接接&&就行。

展示类style给文字加颜色、边框、对齐;join横向或纵向拼接文本块;pager带行号的滚动查看;table渲染表格数据;spin跑命令时显示加载动画;log带级别的日志输出;format解析 Markdown 和 Emoji。

实际用起来什么样

拿提交代码举例。以前写 commit message 就是git commit -m "fix bug",现在用 Gum 可以这样:

TYPE=$(gum choose"fix""feat""docs""style""refactor""test""chore")SCOPE=$(gum input--placeholder"scope")SUMMARY=$(gum input--value"$TYPE$SCOPE: "--placeholder"Summary")DESC=$(gumwrite--placeholder"Details")gum confirm"Commit?"&&gitcommit-m"$SUMMARY"-m"$DESC"

每一步都有清晰的交互提示,用户知道该干什么。整个过程从原来的盲打变成了引导式操作。

类似的场景很多:从 git 历史里挑 commit、从 tmux 会话里选一个连接、批量卸载 brew 包、清理 git 分支,都能用几行 Gum 命令搞定。

定制化程度高

每个命令都支持两种定制方式:命令行 flag 和环境变量。颜色、宽度、提示符、占位符、边框样式都能调。比如:

gum input--cursor.foreground"#FF0"--prompt"* "--width80--placeholder"What's up?"

或者用环境变量设默认值,flag 还能覆盖环境变量。这对写 dotfile alias 特别有用,同一个脚本在不同环境可以有不同的默认样式。

安装和使用

主流平台都支持。macOS 和 Linux 用 brew,Arch 用 pacman,Fedora 用 dnf,Windows 用 winget 或 scoop,也能直接go install。装完就是一个gum命令,没有任何依赖。

Gum 底层用的是 Charm 自己的 Bubbles(TUI 组件库)和 Lip Gloss(样式库),这两个库在 Go 的 TUI 生态里口碑不错。Gum 把它们的能力包装成了命令行工具,普通脚本也能用上。

适合谁

如果你写 Shell 脚本、管 dotfile、做终端工作流,Gum 值得试。它不是那种功能堆砌的大工具,就是把"脚本交互"这一件事做好了。几行代码就能让脚本从"能用"变成"好用"。

对于团队来说,统一的交互风格也能降低脚本的学习成本。新同事看一眼就知道怎么操作,不用读文档。

用"变成"好用"。

对于团队来说,统一的交互风格也能降低脚本的学习成本。新同事看一眼就知道怎么操作,不用读文档。

http://www.jsqmd.com/news/1099858/

相关文章:

  • Claude Opus 4.8快速模式集成GitHub Copilot:AI编码响应速度实测与提效指南
  • 2026最新智慧园区厂商挑选指南 国内哪家服务专业更靠谱?
  • 制造企业数字化转型中AI智能体的角色是什么
  • 汇编指令补充
  • 基于STM32单片机智能手环心率血氧体温GPS定位跌倒计步器系统设计1(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_
  • 哈夫曼树的构造、编码生成与带权路径长度计算——基于C语言的实验实现与分析 P12114068王勇豪
  • 湘美谈教育湘美书院成功学系列:AI时代的,图书的意义
  • P1375 小猫【洛谷算法习题】
  • 为什么你的vmx文件压缩后反而增大?深度解析NTFS稀疏文件、零填充与TRIM指令协同失效原理
  • 题材多元口碑在线 高分游戏承包你的游玩档期
  • 跨越微伏级噪声鸿沟:硬核解析工业微弱传感器信号调理与高精度捕获实战
  • 村花云 - 高性价比云服务器服务平台
  • 汇编——比较指令和条件跳转指令
  • Ubuntu 系统安装 Hermes Agent 使用教程
  • web安全代码基础-PHP(模板组件插件安全)
  • FastAPI 基础篇:类型注解驱动的 Python Web 开发范式
  • OpenHarness源码研究-4-AgentLoop对话引擎与工具系统
  • 如何深度掌控AMD Ryzen处理器:专业硬件调试工具完全指南
  • ros2 humble安装anaconda
  • 机器人-混合关节架构
  • Certbot:免费自动化 HTTPS 证书管理工具
  • 2026年桌面风扇推荐:三款不同功能定位机型,按需选择不踩坑
  • 【毕设级】SpringBoot + MySQL + Thymeleaf 实现高校教材征订管理系统(班级统订+个人补订)
  • Linux生产环境硬盘挂载:告别盘符漂移,使用UUID实现稳定自动挂载
  • 手把手教你用SM2259XT2开卡工具修复固态硬盘(附B0KB颗粒实测)
  • 小学期记录
  • Awesome LLM Skills:给 AI 编程助手装上各种技能包
  • 3分钟掌握深度学习漫画翻译神器:BallonsTranslator完全指南
  • 机器人-从“性能参数领先”转向“工业化能力领先”
  • 效率够高吗?8款AI论文网站排行榜,毕业季救星!