簡體   English   中英

在 bash 函數中為 kubectl 啟用選項卡自動完成

[英]Enable tab auto completion for kubectl in bash function

給定 .bashrc 中的 bash 函數,例如

kgp () {
  kubectl get po -n $1 $2
}

是否可以讓 kubectl 自動完成 k8s 資源(例如命名空間/pod)的工作? 例如,如果我使用

kubectl get po -n nsprefix podprefix

我可以自動完成前綴。 而當我調用位置參數時

kgp nsprefix podprefix

我必須輸入整個資源名稱。

是的,那是因為 bash-completion 只理解已知命令,而不是別名或您編寫的新函數。 您將通過alias whee=/bin/ls的一個簡單示例遇到同樣的事情,然后whee <TAB>將什么也不做,因為它不會“遞歸”到該別名中,並且肯定不會嘗試調用您的函數為了找出它可能接受的論點。 這可能是災難性的

歡迎您為自定義kgp創建一個新的complete處理程序,但這是獲得所需行為的唯一方法

_kgp_completer() {
    local cur prev words cword

    COMPREPLY=()
    _get_comp_words_by_ref -n : cur prev words cword
    if [[ $cword == 1 ]] && [[ -z "$cur" ]]; then
        COMPREPLY=( $(echo ns1 ns2 ns3) )
    elif [[ $cword == 2 ]] && [[ -z "$cur" ]]; then
        COMPREPLY=( $(echo pod1 pod2 pod3) )
    fi
    echo "DEBUG: cur=$cur prev=$prev words=$words cword=$cword COMPREPLY=${COMPREPLY[@]}" >&2
}
complete -F _kgp_completer kgp

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM