为何不用Gum为终端打造时尚定制界面?

摘要:1. 引言:那个让人“劝退”的黑底白字 你写过(或者被迫维护过)这种 Shell 脚本吗? Bash echo "请输入提交类型 (fixfeatdocs):" read TYPE e
1. 引言:那个让人“劝退”的黑底白字 你写过(或者被迫维护过)这种 Shell 脚本吗? Bash echo "请输入提交类型 (fix/feat/docs):" read TYPE echo "请输入提交信息:" read MSG echo "确认提交吗?(y/n)" read CONFIRM if [ "$CONFIRM" != "y" ]; then exit 1; fi 痛点场景: 交互反人类:输错了还得重来,没有撤回键。 颜值负分:纯文本堆砌,毫无重点,看着就想睡觉。 容易出错:用户输入 Fix、fix 还是 FIX?还得写正则去校验。 解决方案: Gum。它不需要你学习 Go 或 Python,你依然在写 Bash 脚本,但每一行命令都能召唤出一个现代化的、可交互的 UI 组件(下拉框、搜索栏、加载动画)。
2. 概念拆解:Gum 是什么? 生活化类比:乐高积木 vs. 黏土 传统的 Shell 脚本 就像玩黏土。你想捏个输入框,得自己用 read 和 case 语句一点点捏,稍微用力不对就塌了(逻辑 bug)。 Gum 就像乐高积木。它提供了一盒现成的、精美的零件。 想要一个下拉菜单?拿一块 gum choose 积木插上去。 想要一个多行文本框?拿一块 gum write 积木插上去。 想要确认弹窗?拿一块 gum confirm 积木插上去。 你不需要知道积木内部怎么制造的,你只需要把它们拼在一起,就是一个漂亮的 App。
3. 动手实战:5 分钟写一个“极客版”Git 提交工具 我们来重写引言里那个丑陋的脚本。假设我们要写一个 git-commit.sh 脚本,规范团队的提交格式。 第一步:安装 Gum Bash # macOS / Linux (Homebrew) brew install gum # Arch Linux pacman -S gum 第二步:编写脚本 (Magic Happens) 创建一个文件 better-commit.sh: Bash #!/bin/bash # 1. 漂亮的标题 (gum style) gum style \ --foreground 212 --border-foreground 212 --border double \ --align center --width 50 --margin "1 2" --padding "2 4" \ "Git Commit Helper" "Powered by Gum" # 2. 选择提交类型 (gum choose) # 用户不用打字,直接用箭头键选择,回车确认 echo "👉 选择变更类型:" TYPE=$(gum choose "fix: 修复 Bug" "feat: 新功能" "docs: 文档更新" "style: 格式调整") # 3. 输入提交信息 (gum input) # 自带占位符,看起来很现代 echo "📝 简短描述:" SCOPE=$(gum input --placeholder "例如:user-login 模块...") # 4. 详细描述 (gum write) # 弹出一个类似于 nano 的编辑器,支持多行输入,Ctrl+D 保存 echo "📄 详细内容 (可选,Ctrl+D 保存):" DESCRIPTION=$(gum write --placeholder "详细描述本次变更的内容...") # 5. 最终确认 (gum confirm) # 漂亮的 [Yes] / [No] 按钮 gum confirm "确认提交吗?" && { # 6. 加载动画 (gum spin) # 在执行 git commit 时显示旋转动画,而不是枯燥的光标 gum spin --spinner dot --title "正在提交代码..." -- sleep 2 # 这里模拟耗时,实际替换为: git commit -m "$TYPE($SCOPE): $DESCRIPTION" gum style --foreground 10 "✅ 提交成功!" } || { gum style --foreground 1 "❌ 已取消。" } 代码解析:为什么这么优雅? gum choose:它是模糊搜索友好的。
阅读全文