你用过,你肯定没用过,你真不想试试?。
以前写shell脚本,全是黑屏白字,一路命令敲下去,看着就累。输入个东西,还得手动echo再read,确认操作就更麻烦了,搞个yes/no都得自己写判断。整个过程干巴巴的,一点意思没有。最近在Linux社区逛的时候,看到有人推荐一个叫Gum的工具,说是能给脚本“整容”,试了一下,的确 不一样了。
这玩意儿是用Go写的,装起来也方便。我用的是Ubuntu,按着网上的方法,先把它的软件源加进去,几行命令搞定。装完直接就能用,不像有些工具还得各种依赖。它提供了好多现成的命令,像是input、choose、confirm这些,拿来就能拼到自己的脚本里,不用再从头造轮子了。
最简单的就是让用户输点东西。以前我都是直接用read,目前改成gum input,连提示语都不用自己写了。想要密码那种隐藏输入的,加上–password就行,输的内容不会显示出来,安全多了。我还试过让它等十秒钟,用户不输就自动跳过,这个对自动化流程挺有用的,不用一直卡在那里。

选东西也变得更直观了。列如我要从一堆文件里挑一个来处理,以前可能得列出来再手动输名字。目前用gum filter,把所有文件名传进去,它会弹出个搜索框,可以实时过滤,键盘上下键选,回车确定,跟现代应用的体验差不多了。我拿它来选git分支,比记命令快多了。
做决定的时候加个确认框,心里踏实不少。`gum confirm “真要删吗?”` 这种,点一下就继续,点撤销啥事没有。默认还可以设成否,防止手滑。我写了个清理脚本,删东西前都用它问一下,再也不会一不小心把重大的干掉了。
最让我觉得省事的是做git提交。每次都要想类型(feat、fix这些),然后写标题和详情。目前我用Gum搭了个小流程:先用choose选类型,再input输作用域,接着一个input写摘要,最后用write写详细说明,支持多行,写完还能预览。整个过程像填表一样顺,写出来的commit message格式也整齐。

它还有个spin功能,跑长任务时用特别合适。列如我在脚本里执行编译或者打包,之前只能干等着,不知道是不是卡住了。目前加一行`gum spin –title “编译中…” — make build`,终端上就会有个小动画转着,旁边写着字,一看就知道程序在跑,没死。动画样式还能换,有圆点、条形、地球仪好几种,可以配个跟任务主题搭的。
文本输出也能美化。普通的echo就是纯文字,用gum style包一层,就能改颜色、加边框、居中显示。我写了个小报告脚本,开头用双线框框住标题,警告信息用红色加粗,一出来就很明显。这些样式还能通过环境变量统一设置,保证整个脚本的风格一致。
我把这些功能串起来,做了个日常运维的小工具集。启动后先给我个菜单,选完进对应的功能。有日志查看、服务重启、备份打包这些。每个操作都有提示,关键步骤要确认,跑着的时候有spinner,结束会有个简单的结果提示。虽然功能简单,但用起来顺手多了,看着也不闹心。

这工具的用户不少,GitHub上星星涨得挺快的,说明许多人也觉得原来的脚本交互太难用了。它不是要取代bash,而是让bash脚本能做得更好看、更好用。几行代码就能把一个土土的脚本变得像模像样。而且它是单个二进制文件,不怎么占地方,复制到别的机器也能直接跑。
装了之后我顺手翻了下它的协助文档,命令不多,每个的参数也清晰。官方给了些例子,像那个git提交的,直接抄过来就能用。我也试着改了改,加了些自己的逻辑。没有复杂的学习成本,懂点基础shell就能上手。
有些人可能觉得,不就是换个输入方式吗,没必要。但用过几次你就知道,体验差太多了。原来要输三四行命令才能完成的事,目前点几下就搞定了。脚本不再是只有自己能看懂的黑盒,也能做成别人用了都说方便的工具。

目前我写新脚本,基本都会想着能不能用上Gum。哪怕只是加个好看的标题,或者让输入有提示,整个感觉就不一样了。它没解决什么大问题,但它把那些小的不爽全都磨平了。有时候半夜起来处理问题,看到一个清爽的界面,心情都好点。

