美文网首页
Gum 使用指南:编写一个美观的交互式脚本

Gum 使用指南:编写一个美观的交互式脚本

作者: Xpitz | 来源:发表于2022-08-03 10:52 被阅读0次

文章首发于个人公号:阿拉平平

我们平时编写脚本时,可能会涉及与用户进行交互,比如要求输入一些信息或者勾选某些选项。要在脚本中实现交互类需求,多少有点麻烦。最近我在逛 GitHub 时,无意间发现了一个用于美化交互示脚本的工具,于是尝试了下。

项目介绍

Gum[1] 是一个基于 Golang 开发的脚本美化工具,它提供了许多现成的工具来帮助用户编写更好用的脚本。本文将介绍 Gum 的安装和使用方法。

下载安装

Gum 目前最新版本为 0.2.0,可以到 releases 下找到对应的安装包。以 rpm 包为例:

wget https://github.com/charmbracelet/gum/releases/download/v0.2.0/gum_0.2.0_linux_amd64.rpm

安装 rpm 包:

rpm -ivh gum_0.2.0_linux_amd64.rpm

检查 Gum 版本:

gum -v
gum version v0.2.0 (b7f04e0)

基本用法

本章将介绍 Gum 的基本用法,包含:

  1. 交互命令:介绍 Gum 中交互命令的用法和显示效果。
  2. 使用示例:选用交互命令,编写一个脚本。

交互命令

Input:提示输入一个简单的命令。

gum input --placeholder "Please input"

显示效果如下:

Write:提示输入多行文本。

gum write > test.txt

显示效果如下:

Filter:使用模糊查询来过滤一个列表。

cat test.txt | gum filter

显示效果如下:

Choose:从列表中选择多个选项。

# 单选
cat test.txt | gum choose
# 多选,限制数量
cat test.txt | gum choose --limit 2
# 多选,不限制数量
cat test.txt | gum choose --no-limit

显示效果如下:

Confirm:确认是否执行操作。

gum confirm && echo "confirm" || echo "cancel"

显示效果如下:

Spin:运行命令时显示一个 spinner。

gum spin --spinner dot --title "Testing..." -- sleep 2

显示效果如下:

示例

接下来,我打算借助 Gum 来编写一个脚本,这个脚本用于批量调整 K8s 集群中无状态应用(Deployment)的副本数。

编写之前,我们梳理下脚本的运行步骤:

  1. 获取 K8s 集群中的命名空间(Namespace)。
  2. 选择命名空间后,获取该空间下的 Deployment。
  3. 选择一个或多个 Deployment 后,询问要扩缩容的副本数。
  4. 询问是否进行扩缩容,确认后对其扩缩容。

在这个需求中,我们会用到:Filter,Choose,Input,Confirm。完整的脚本如下:

#!/bin/bash

NS=$(kubectl get ns -o custom-columns=NAME:.metadata.name --no-headers|gum filter)
DEPLOY=$(kubectl get deploy -n $NS -o custom-columns=NAME:.metadata.name --no-headers|gum choose --no-limit)
REPLICAS=$(gum input --placeholder="Please input replicas")

gum confirm "Scale deploy?" && kubectl scale deploy --replicas=$REPLICAS $DEPLOY -n $NS || echo "Scale cancelled!"

脚本运行的效果如下:

写在最后

通过 Gum,我们可以用很少的代码就实现一个美观的交互类脚本。当然,Gum 除了内置的交互类命令,还支持格式化展示文本、自定义样式。

References

[1] Gum: https://github.com/charmbracelet/gum

相关文章

网友评论

      本文标题:Gum 使用指南:编写一个美观的交互式脚本

      本文链接:https://www.haomeiwen.com/subject/jbcrwrtx.html