Como posso obter o Bash para exibir as definições de preenchimento automático de um determinado comando?

3

Eu uso o comando module para carregar e descarregar coisas para o meu ambiente, algumas das máquinas que uso têm auto-preenchimento adequado, outras não.

Gostaria de saber se é possível saber de onde vem a conclusão e instalar em outro lugar.

    
por RSFalcon7 31.10.2013 / 20:27

1 resposta

5

Você pode mostrar o código de conclusão de um comando usando o complete builtin. Aqui está um exemplo:

$ complete -p ls
complete -F _longopt ls

Se você estiver interessado em saber o que o _longopt faz, use o type builtin:

$ 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 ------

Em caso de funções, a solução apontada por HairOfTheDog aqui :

# 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

O Bash não possui uma maneira de determinar onde as variáveis ou funções de ambiente foram definidas no processo de inicialização. Caso contrário, você pode obter está executando o bash com -x .

bash -x -i -l

Isso executará um shell de login interativo no modo de depuração, que mostrará todas as linhas executadas. Se você encontrar a definição da função na saída, poderá encontrar o último comando source ou . que veio antes dela.

    
por 31.10.2013 / 20:32