Como você pode espelhar uma função de autocompletar em seus próprios aliases (em 14.04)?

5

Eu tenho vários aliases que usei na minha máquina 12.04.

exemplo:

alias pssh="tsocks ssh"
alias pscp="tsocks scp"
alias prdp="tsocks xfreerdp  ..........SOMETHING ...."

Esses aliases são modificações de comandos regulares do linux (scp, ssh ect.), portanto, eu gostaria que esses aliases tivessem as mesmas regras de autocomplete que suas contrapartes originais. Eu não quero escrever minhas próprias regras, pois as regras para os comandos regulares estão perfeitamente bem.

Em 12.04, o seguinte funcionou perfeitamente:

complete -F _ssh pssh
complete -F _scp pscp
complete -F _ssh prdp

Isso não funciona em 14.04. Se eu tentar completar automaticamente, recebo o seguinte erro:

bash: completion: function '_ssh' not found

Se eu completar automaticamente no ssh antes de tentar pssh tudo funciona. Até onde sei, é porque as regras de autocomplete não são carregadas antes de serem usadas. Até que as regras de autocomplete para o ssh sejam carregadas, minhas regras são inválidas e resultam em um erro.

Como posso consertar isso, como conectar corretamente meu alias a uma regra de autocomplete definida para um comando linux comum?

    
por WBang 24.04.2014 / 20:50

1 resposta

2

As novas versões de conclusão do bash (> = 2.0) melhoraram imensamente o tempo usado para carregar a lógica de autocompletar. Eles fizeram isso carregando os arquivos necessários a pedido, a localização mais recente desses arquivos é:

/ usr / share / bash-conclusão / conclusões /

Se você usar ls -lah para explorar esse diretório, descobrirá que existem muitos links suaves. Isso é porque um arquivo é necessário para cada comando / alias, então, se você tiver pssh, pscp e prdp você precisará criar links com esses nomes:

sudo ln -s /usr/share/bash-completion/completions/ssh /usr/share/bash-completion/completions/psss
sudo ln -s /usr/share/bash-completion/completions/ssh /usr/share/bash-completion/completions/pscp
sudo ln -s /usr/share/bash-completion/completions/ssh /usr/share/bash-completion/completions/prdp

Outra alternativa é fazer o syslink do arquivo de preenchimento automático do ssh para /etc/bash_completion.d /

sudo ln -s /usr/share/bash-completion/completions/ssh /etc/bash_completion.d/ssh

O método antigo carregará a função _ssh em cada sessão interativa do bash (tornando a inicialização mais lenta).

Depois de usar qualquer um dos métodos acima, sua configuração complete -F _ssh pssh ... relacionará a função _ssh com seus aliases.

    
por Javier López 07.06.2014 / 09:22