美文网首页
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