Skip to content

Gum

腳本互動介面工具包

軟體分類 生產力 / 開發工具
開發廠商 Charm Bracelet
Stars
0
Forks
0
License
MIT
Version
v0.17.0
Update
OS

產品說明

Gum 是由 Charm Bracelet 團隊開發的一款開源工具,旨在讓普通的 Shell 腳本(Shell Scripts)也能擁有現代化、華麗且互動性強的終端機介面(TUI)。

傳統的 Shell 腳本通常只能依賴單調的 read 指令來獲取輸入,或使用 echo 輸出純文字。Gum 改變了這一切,它將複雜的 Go 語言 TUI 框架(Bubble Tea)封裝成一個個獨立的命令列工具。這意味著你完全不需要會寫 Go 語言,只要在你的 Bash/Zsh 腳本中呼叫 gum inputgum choosegum spin,就能立即生成輸入框、下拉選單、模糊搜尋與加載動畫。

核心特色:

  • 高度模組化:每個 UI 元件都是一個獨立的指令(如 input, filter, confirm),可像樂高積木般自由組裝。
  • 無需學習新語言:專為 Shell 設計,完全透過標準輸入/輸出(stdin/stdout)與結束代碼(Exit Codes)來與腳本邏輯互動。
  • 華麗的視覺效果:繼承了 Charm 家族的極致美學,支援豐富的顏色、邊框與 Emoji,讓黑底白字的腳本瞬間升級。
  • 模糊搜尋(Fuzzy Filtering):內建類似 fzf 的強大過濾功能,讓使用者能從長清單中快速篩選目標。
  • 跨平台支援:無論是在 Linux 伺服器、macOS 開發機還是 Windows PowerShell 中都能一致運行。

安裝指南

Gum 支援所有主流作業系統,安裝非常便捷。

macOS / Linux (Homebrew)

brew install gum

Linux (Arch Linux / Manjaro)

pacman -S gum

Windows (Scoop)

scoop install charm-gum

Windows (Winget)

winget install charmbracelet.gum

通用安裝 (使用 Go)
若你的環境已有 Go 語言(1.17+),這是最乾淨的安裝方式:

go install [github.com/charmbracelet/gum@latest](https://github.com/charmbracelet/gum@latest)

使用教學

Gum 的設計哲學是「一個指令做一件事」,並透過 Pipeline 串接。

1. 基礎互動元件

  • 輸入文字 (input)
    帶有 placeholder 的輸入框,支援密碼模式 (--password)。

    echo "請輸入你的名字:"
    NAME=$(gum input --placeholder "例如: Peter")
    echo "你好, $NAME!"
    
  • 確認對話框 (confirm)
    顯示 Yes/No 選項,根據使用者的選擇回傳結束代碼(0 或 1)。

    gum confirm "是否刪除所有檔案?" && rm -rf * || echo "取消操作"
    
  • 列表選擇 (choose)
    從提供的參數中讓使用者選擇一個(支援多選)。

    COLOR=$(gum choose "紅色" "綠色" "藍色")
    echo "你選擇了: $COLOR"
    

2. 進階過濾與加載

  • 模糊搜尋 (filter)
    這是 Gum 最強大的功能之一,能將任何文字清單變成可搜尋的選單。

    # 列出所有 Docker 容器並讓使用者選擇一個來刪除
    docker ps -a --format "{{.ID}}  {{.Image}}" | gum filter | awk '{print $1}' | xargs docker rm
    
  • 加載動畫 (spin)
    在執行耗時指令時顯示動畫,避免使用者以為當機。

    gum spin --title "正在編譯專案..." -- sleep 5
    

3. 實戰範例:優雅的 Git Commit

你可以把以下內容存成一個腳本(如 git-gum.sh),用它來取代原本枯燥的 git commit

#!/bin/sh

# 1. 選擇 Commit 類型
TYPE=$(gum choose "fix" "feat" "docs" "style" "refactor" "test" "chore")

# 2. 輸入主要訊息 (限制 50 字)
SCOPE=$(gum input --placeholder "修改範圍 (可選)")
SUMMARY=$(gum input --placeholder "簡短描述 (必填)" --width 50)

# 3. 輸入詳細內容 (多行編輯模式)
DESCRIPTION=$(gum write --placeholder "詳細修改內容 (Ctrl+D 結束)")

# 4. 確認並提交
gum confirm "確認提交嗎?" && git commit -m "$TYPE($SCOPE): $SUMMARY" -m "$DESCRIPTION"

小撇步:Gum 的所有元件都支援 CSS 風格的自定義!試試看 gum style --foreground 212 --border double "Hello World" 來製作漂亮的標題。