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

RSF*_*on7 6 bash autocomplete

我使用module命令将内容加载和卸载到我的环境中,我使用的某些机器具有适当的自动完成功能,而其他机器则没有。

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

jor*_*anm 10

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

$ complete -p ls
complete -F _longopt ls
Run Code Online (Sandbox Code Playgroud)

如果您对它的作用感兴趣_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 ------
Run Code Online (Sandbox Code Playgroud)

如果是函数,您可以在此处使用 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
Run Code Online (Sandbox Code Playgroud)

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

bash -x -i -l
Run Code Online (Sandbox Code Playgroud)

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