預設 Tab 只能補全檔名/路徑。啟用 bash-completion 套件並善用 complete、compgen 內建指令,即可為任意指令/腳本定義專屬補全邏輯 (選項、參數、主機名、使用者、變數等),大幅降低輸入錯誤與查閱手冊時間。
# Ubuntu/Debian
apt install bash-completion
# CentOS/RHEL
yum install bash-completion
# 載入 (通常登入自動載入 /etc/bash_completion 或 /usr/share/bash-completion/bash_completion)
. /etc/bash_completion
complete -p | less
complete -c which
# which → 列出所有可執行指令
complete -d ls
# ls → 只顯示目錄
complete -j ./my_script.sh
# jobs 顯示的工作名稱作為參數
complete -P '">' -S '<"' ./my_script.sh
# 補全結果變成 ">value<"
export FIGNORE='.tmp:.o'
complete -f -d ls
# ls 不會顯示 .tmp、.o 檔案
export IFS=" "
complete -W "bubble quick" ./sort.sh
# 也可用變數
complete -W "$SORT_TYPE1 $SORT_TYPE2" ./sort.sh
_parser_options() {
local cur="${COMP_WORDS[COMP_CWORD]}"
COMPREPLY=( $(compgen -W '-i --incoming -o --outgoing -m --missed' -- "$cur") )
}
complete -F _parser_options ./parser.pl
# ./parser.pl → 動態顯示 -i/--incoming 等選項
關鍵變數:
COMP_WORDS:命令列單字陣列
COMP_CWORD:當前單字索引
COMPREPLY:補全結果陣列 (由函數填入)
compgen:根據選項產生匹配項
complete -F _my_func -o dirnames ./myscript.sh
# _my_func 無匹配時,自動改用目錄補全
將 complete 指令寫入 ~/.bashrc 或專案專屬 completion.bash 並 source。參考 /etc/bash_completion、/usr/share/bash-completion/completions/ 內建大量範例 (git, docker, kubectl, systemctl 等)。