Gum
腳本互動介面工具包
產品說明
Gum 是由 Charm Bracelet 團隊開發的一款開源工具,旨在讓普通的 Shell 腳本(Shell Scripts)也能擁有現代化、華麗且互動性強的終端機介面(TUI)。
傳統的 Shell 腳本通常只能依賴單調的 read 指令來獲取輸入,或使用 echo 輸出純文字。Gum 改變了這一切,它將複雜的 Go 語言 TUI 框架(Bubble Tea)封裝成一個個獨立的命令列工具。這意味著你完全不需要會寫 Go 語言,只要在你的 Bash/Zsh 腳本中呼叫 gum input、gum choose 或 gum 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"來製作漂亮的標題。




