Skip to content

Gum

腳本互動介面工具包

軟體分類 生產力 / 開發工具
軟體標籤
KVMCMSXojomoodle
開發廠商 Charm Bracelet
Stars
23.1k
Forks
471
License
MIT
Version
v0.17.0
Update
2026-02-16
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" 來製作漂亮的標題。