Eu tenho um repositório git onde mantenho alguns binários vinculados estaticamente junto com arquivos man relacionados e arquivos de conclusão do bash, que são todos 'instalados' usando o GNU Stow para fazer os links simbólicos.
Eu já coloquei os links simbólicos para os arquivos de conclusão do bash /etc/bash_completion.d
sem problemas, mas recentemente comecei a colocá-los /usr/share/bash-completion/completions
, pois pensei que era um local mais correto para eles, visto que os binários estavam entrando /usr/local/bin
e os arquivos man em /usr/local/share/man
.
Tudo funciona como antes, exceto quatro arquivos específicos de conclusão do bash, que não estão mais funcionando quando colocados neste novo local. Estes são:
E esses dois para fzf:
Eu tenho 20 outros arquivos de conclusão do bash que funcionam bem. O que há nesses arquivos de conclusão de bash específicos que os fazem funcionar /etc/bash_completion.d
sem problemas, mas não em /usr/share/bash-completion/completions
?
EDIT:
Eles também não funcionam em ~/.local/share/bash-completion/completions
qualquer um.
Informação adicional:
Os arquivos são originados pelas .bashrc
linhas padrão Debian/Ubuntu:
# Enable programmable completion features
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi
Em ambos os locais, não é o conteúdo dos diretórios que está sendo originado, mas esses dois arquivos:
/usr/share/bash-completion/bash_completion
O segundo arquivo simplesmente aponta para o primeiro arquivo se NÃO shopt -oq posix
. Na minha configuração:
$ if ! shopt -oq posix; then echo "not posix"; fi
not posix
Acho que a resposta deve estar em /usr/share/bash-completion/bash_completion .
Mais:
Tentei substituir bash_completion
pela versão mais recente, mas também não funcionou.
https://github.com/scop/bash-completion
Também..
Esses arquivos não funcionam quando colocados em ~/.local/share/bash-completion/completions
qualquer um.
Os arquivos de conclusão
/etc/bash_completion.d
são sempre originados imediatamente porbash_completion
para compatibilidade com versões anteriores. Oscompletions
diretórios, por outro lado, fornecem lentamente os scripts internos, ou seja, um arquivo de conclusão específico não é originado até que a conclusão seja solicitada para esse comando. O arquivo de origem é determinado por seu nome, portanto, deve ter o mesmo nome do comando para o qual você está tentando obter conclusões. Assim, por exemplo,tmux.completion.bash
deve ser symlinked comocompletions/tmux
e nãocompletions/tmux.completion.bash
.Finalmente, como você está colocando todo o resto em
/usr/local
, observe que você também pode colocar os scripts de conclusão:/usr/local/share/bash-completion/completions
.