Gum:让 Shell 脚本拥有交互界面
文章目录Gum让 Shell 脚本拥有交互界面能干什么实际用起来什么样定制化程度高安装和使用适合谁Gum让 Shell 脚本拥有交互界面写 Shell 脚本最头疼的是什么不是逻辑是交互。你想让用户选个选项、输个密码、确认个操作要么用 read 凑合要么弹个丑陋的默认提示。Gum 这个工具就是来解决这个问题的。Gum 来自 Charm 团队Go 语言写的Star 数已经到了 2.4 万。它的定位很明确给 Shell 脚本加上好看的交互组件不用写一行 Go 代码。能干什么Gum 提供了十几个子命令覆盖了脚本交互的常见场景选择类choose让用户从列表里选一个或多个filter支持模糊搜索过滤file弹出文件树让你挑文件。输入类input单行输入支持密码模式write多行文本输入CtrlD 结束。确认类confirm弹个确认框返回 0 或 1直接接就行。展示类style给文字加颜色、边框、对齐join横向或纵向拼接文本块pager带行号的滚动查看table渲染表格数据spin跑命令时显示加载动画log带级别的日志输出format解析 Markdown 和 Emoji。实际用起来什么样拿提交代码举例。以前写 commit message 就是git commit -m fix bug现在用 Gum 可以这样TYPE$(gum choosefixfeatdocsstylerefactortestchore)SCOPE$(gum input--placeholderscope)SUMMARY$(gum input--value$TYPE$SCOPE: --placeholderSummary)DESC$(gumwrite--placeholderDetails)gum confirmCommit?gitcommit-m$SUMMARY-m$DESC每一步都有清晰的交互提示用户知道该干什么。整个过程从原来的盲打变成了引导式操作。类似的场景很多从 git 历史里挑 commit、从 tmux 会话里选一个连接、批量卸载 brew 包、清理 git 分支都能用几行 Gum 命令搞定。定制化程度高每个命令都支持两种定制方式命令行 flag 和环境变量。颜色、宽度、提示符、占位符、边框样式都能调。比如gum input--cursor.foreground#FF0--prompt* --width80--placeholderWhats up?或者用环境变量设默认值flag 还能覆盖环境变量。这对写 dotfile alias 特别有用同一个脚本在不同环境可以有不同的默认样式。安装和使用主流平台都支持。macOS 和 Linux 用 brewArch 用 pacmanFedora 用 dnfWindows 用 winget 或 scoop也能直接go install。装完就是一个gum命令没有任何依赖。Gum 底层用的是 Charm 自己的 BubblesTUI 组件库和 Lip Gloss样式库这两个库在 Go 的 TUI 生态里口碑不错。Gum 把它们的能力包装成了命令行工具普通脚本也能用上。适合谁如果你写 Shell 脚本、管 dotfile、做终端工作流Gum 值得试。它不是那种功能堆砌的大工具就是把脚本交互这一件事做好了。几行代码就能让脚本从能用变成好用。对于团队来说统一的交互风格也能降低脚本的学习成本。新同事看一眼就知道怎么操作不用读文档。用变成好用。对于团队来说统一的交互风格也能降低脚本的学习成本。新同事看一眼就知道怎么操作不用读文档。