Eu escrevi uma função para obter meus hosts da configuração ssh sem obter hosts curinga:
sshConfAutoComplete() {
cat ~/.ssh/config | \
grep 'host ' | \
sed '
s#.*\*##g;
s#host ##g
'
}
Saída:
pi
lynx
iridium
batchelorantor
rasp
A saída está correta, então adicionei esta função a:
/usr/local/etc/bash_completion.d/ssh
Assim:
sshConfAutoComplete() {
cat ~/.ssh/config | \
grep 'host ' | \
sed '
s#.*\*##g;
s#host ##g
'
}
complete -F sshConfAutoComplete ssh
Então adicionei esta fonte: . /usr/local/etc/bash_completion.d/ssh
to~/.bash_profile
Sourced ~/bash_profile
, quando digito ssh <tab>
aparece o seguinte:
pi
lynx
iridium
batchelorantor
rasp
Se eu digitar ssh ly <tab>
, não será preenchido automaticamente lynx
, apenas exibirá o que foi dito acima.
Como faço para corrigir isso?
Na
man bash
seção intitulada Conclusão Programável explica como a função chamada por-F
precisa fornecer os resultados correspondentes na variável de arrayCOMPREPLY
. Normalmente, a lista completa fornecida pelos seussed
comandos é passada para o comandocompgen -W
para que ele tente combinar as palavras com a palavra alvo, que é o argumento 2 ($2
) da sua função. Simplificando um pouco obtemos:Eu consegui trabalhar fazendo isso e adicionando meu
~/bash_profile
:Meu comando sed anterior deixou uma linha em branco na exclusão de
host *