如何让 Bash 显示给定命令的自动完成定义?

如何让 Bash 显示给定命令的自动完成定义?

我使用module命令在我的环境中加载和卸载内容,我使用的一些机器具有正确的自动完成功能,而其他机器则没有。

我想知道是否有可能知道完成来自哪里并安装在其他地方。

答案1

您可以使用内置命令显示命令的完成代码complete。这是一个例子:

$ complete -p ls
complete -F _longopt ls

如果您对它的作用感兴趣_longopt,可以使用type内置函数:

$ type -a _longopt
_longopt is a function
_longopt () 
{ 
    local cur prev words cword split;
    _init_completion -s || return;
    case "${prev,,}" in 
        --help | --usage | --version)
   ----- snip ------

如果是函数,您可以使用 HairOfTheDog 指出的解决方案这里:

# Turn on extended shell debugging
shopt -s extdebug

# Dump the function's name, line number and fully qualified source file  
declare -F _longopt

# Turn off extended shell debugging
shopt -u extdebug

Bash 无法确定初始化过程中环境变量或函数的定义位置。 否则,您可以获得正在运行 bash 的信息-x

bash -x -i -l

这将在调试模式下执行交互式登录 shell,它将显示执行的每一行。如果在输出中找到函数定义,则可以找到它之前的最后一个source或命令。.

相关内容