Eu tentei arduamente descobrir isso antes de postar aqui, mas não consigo encontrar nenhum outro exemplo de pessoas resolvendo esse problema em particular.
Estou executando o Ubuntu 17.10
Eu escrevi uma função personalizada para manipular a conclusão de tabulação de um dos meus scripts. A intenção é que quando eu digitar o nome do meu script e clicar em [TAB] liste todos os arquivos em / opt / use que terminem em ".use" (sem exibir o ".use" ou o caminho principal) . Parece que fiz esse trabalho até agora.
Os arquivos em / opt / use são os seguintes:
blender-2.79.use
chrome.use
clarisse-3.6.use
unity-2017.3.0p2.use
O código para a função e a conclusão é:
_use () {
files=( 'compgen -f -X "!*.use" /opt/use/' )
output=()
for file in "${files[@]}"; do
fileBaseName='basename $file .use'
output+=("$fileBaseName")
done
COMPREPLY=( ${output[@]} )
}
complete -F _use use
Por favor, não me julgue severamente, sou um artista gráfico, não um programador. :)
Além disso, meu script "use" é na verdade um alias para o seguinte comando:
source /opt/scripts/use.sh
Agora, quando digito:
use[SPACE][TAB][TAB]
Consegui com sucesso uma lista dos arquivos em / opt / use que terminam em ".use".
Até aí tudo bem. Por exemplo, eu digito "use [SPACE] [TAB] [TAB]", é assim:
bvz@bvz-xps15-linux:~$ use
blender-2.79 chrome clarisse-3.6 unity-2017.3.0p2
Minha primeira pergunta é por que eu tenho que bater [TAB] duas vezes? A primeira vez apenas apita. A segunda vez me mostra minhas opções. Isso não é um problema para mim, eu só me pergunto se é uma pista sobre o meu problema, que é isso:
Se eu digitar letras suficientes para ser completamente exclusivo, a conclusão da tabulação não "conclui" realmente a linha. Ele apenas deixa a entrada exatamente como eu digitei e me mostra novamente a lista de arquivos em / opt / use. Então, por exemplo, se eu digitar:
use clar[TAB][TAB]
em vez de preencher a linha para ler:
use clarisse-3.6
que é o que eu esperaria (e o que eu sou depois) deixa a linha como:
use clar
e me mostra abaixo da lista completa de possíveis conclusões. Aqui está uma amostra:
bvz@bvz-xps15-linux:~$ use clar[TAB][TAB]
blender-2.79 chrome clarisse-3.6 unity-2017.3.0p2
bvz@bvz-xps15-linux:~$ use clar
Observe que, na verdade, a linha não foi concluída para ler "clarisse-3.6", embora essa seja a única conclusão possível.
Alguém pode me esclarecer sobre o que eu fiz de errado? Além disso, se esta é uma duplicata, peço desculpas. Eu olhei em volta por vários dias, mas não encontrei nenhum exemplo onde alguém tenha encontrado esse problema, muito menos resolvido.
Obrigado