Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Bash 命令列自動補全進階技巧 10 選:complete、compgen 實戰與動態補全函數

編輯:Linux 教學

預設 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

10 大實戰技巧

1. 查看現有補全規則

complete -p | less

2. 內建標準補全類型

  • 變數補全、使用者補全、主機名補全、路徑補全、檔名補全

3. 指定補全為「所有指令名」

complete -c which
# which  → 列出所有可執行指令

4. 指定補全為「僅目錄」

complete -d ls
# ls  → 只顯示目錄

5. 指定補全為「背景工作名稱」

complete -j ./my_script.sh
# jobs 顯示的工作名稱作為參數

6. 為補全內容加前綴/後綴

complete -P '">' -S '<"' ./my_script.sh
# 補全結果變成 ">value<"

7. 排除特定副檔名 (FIGNORE)

export FIGNORE='.tmp:.o'
complete -f -d ls
# ls  不會顯示 .tmp、.o 檔案

8. 以 IFS 分割字串作為補全清單 (-W)

export IFS=" "
complete -W "bubble quick" ./sort.sh
# 也可用變數
complete -W "$SORT_TYPE1 $SORT_TYPE2" ./sort.sh

9. 撰寫動態補全函數 (-F) — 核心進階用法

_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:根據選項產生匹配項

10. 兜底補全:首選規則無結果時啟用次選 (-o)

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 等)。

Copyright © Windows教程網 All Rights Reserved