簡體   English   中英

如何從 bash 自動完成中刪除單個命令

[英]How to remove a single command from bash autocomplete

如何從 Bash 的自動完成命令建議中刪除單個“命令”? 我問的是第一個參數,命令,自動完成,而不是問“ 如何為特定命令的參數禁用 bash 自動完成

例如,如果我有命令ls並且系統路徑也找到ls_not_the_one_I_want_ever ,並且我鍵入ls然后按 Tab,我想要一種方法從每個可行選項中刪除ls_not_the_one_I_want_ever

我認為這可能與compgen -c列表有關,因為這似乎是可用命令的列表。


背景:Windows 上的 WSL 將所有.dll文件放在我的路徑上,除了應該在那里的.exe文件,所以我想在我的 bash 環境中刪除許多 dll,但我不確定如何繼續。

Bash 5.0 的complete命令為此添加了一個新的-I選項。

根據man bash

  • 完成 -pr [-DEI] [名稱...]

    [...] -I選項表示其他提供的選項和操作應適用於在該行的初始非賦值字上或在命令分隔符之后完成,例如; | ,通常是命令名完成 [...]


例子:

function _comp_commands()
{
    local cur=$2

    if [[ $cur == ls* ]]; then
        COMPREPLY=( $(compgen -c "$cur" | grep -v ls_not_wanted) )
    fi
}

complete -o bashdefault -I -F _comp_commands

使用@pynexj 的答案,我想出了以下示例,該示例似乎運行良好:

if [ "${BASH_VERSINFO[0]}" -ge "5" ]; then
  function _custom_initial_word_complete()
  {
    if [ "${2-}" != "" ]; then
      if [ "${2::2}" == "ls" ]; then
        COMPREPLY=($(compgen -c "${2}" | \grep -v ls_not_the_one_I_want_ever))
      else
        COMPREPLY=($(compgen -c "${2}"))
      fi
    fi
  }

  complete -I -F _custom_initial_word_complete
fi

暫無
暫無

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

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