Por que o preenchimento de caminho no bash nem sempre funciona?

7

Com diferentes ambientes bash (instalações diferentes) eu tenho diferentes comportamentos em termos de completamento de caminho ao pressionar TAB na linha de comando depois. Onde isso é tratado?

Um exemplo específico:

Eu corro cmake com um -D -argument:

cmake -DCMAKE_TOOLCHAIN_FILE=~/x-too<TAB>

não faz nada. Considerando que (observe o espaço entre = e ~

cmake -DCMAKE_TOOLCHAIN_FILE= ~/x-too<TAB> 

conclui para

cmake -DCMAKE_TOOLCHAIN_FILE= ~/x-tools

Em outros sistemas, ele funciona mesmo sem espaço entre = e ~.

Onde encontro os arquivos e valores de configuração relacionados?

    
por Patrick B. 07.04.2016 / 10:19

2 respostas

3

Você precisa começar com /etc/profile . Veja o que outros arquivos são originados por isso (com o comando . provavelmente).

Por exemplo, no meu sistema Ubuntu,

  • /etc/profile sources todos os arquivos * .sh em /etc/profile.d/
  • /etc/profile.d/bash_completion.sh sources /usr/share/bash-completion/bash_completion
  • esse arquivo:
    • configura uma função loader de conclusão que parece em /usr/share/bash-completion/completions/
    • e fontes ~/.bash_completion

Você vai querer seguir esse caminho em seus vários sistemas. Talvez não exista nenhum arquivo cmake em / usr / share / bash-completion / completions / em um deles.

    
por 07.04.2016 / 18:20
3

Os preenchimentos automáticos do Linux funcionam com complete .

 ]➬complete -p  cmake
 complete -F _cmake cmake

Então _cmake está no comando.

]➬type _cmake > cmake.sh

E agora é só ver / depurar. Você modifica, por exemplo, _cmake_mine e chama para testá-lo:

. cmake.sh
complete -F _cmake_mine cmake

Para obter ajuda para o comando any builtin bash:

 help complete
 help [[
 help for
    
por 19.06.2016 / 13:56