Bem... estou tão confuso, porque o único problema real no meu caso é o maldito apóstrofo (').
Situação:a expansão da variável PATH influencia a conclusão da palavra, com base no fato de haver apóstrofos no caminho adicional ou não.
Exemplo:Eu tenho um arquivo exe (chamado "deadbeef") com direitos exe apropriados, cujo caminho contém 2 apóstrofos:
/home/mallniya/hard'n'soft/soft/gnu-linux/portable/deadbeef-0.6.0
Especialmente para um experimento, coloquei o mesmo arquivo no
/home/mallniya/hardnsoftaa/soft/gnu-linux/portable/deadbeef-0.6.0
Se eu exportar o primeiro caminho para a variável $PATH não haverá preenchimento automático no bash, mas será em um segundo caso. Quando digito no terminal as primeiras letras do programa no diretório exportado
morto[TAB]
Não há conclusão no primeiro caso, mas quando uso TAB com a mesma palavra na segunda condição - funciona.
Mas se eu digitar o comando "deadbeef" manualmente no primeiro caso - ele também será executado.
Além disso, ambosqualetipocomandos informa que o arquivo exe existe em ambos os casos.
Então qual é o problema??? Por que o bash processa os apóstrofos assim?
Responder1
Apóstrofos são caracteres especiais para quase todos os shells (shell é o termo que se refere aos interpretadores de linha de comando, que é o programa que lê o que você digita e coloca a coisa apropriada).
Resposta curta: não faça isso. No caso dos espaços, é melhor evitar nomes de arquivos com significado especial ou caracteres especiais neles.
Resposta longa: se você quiser usar apóstrofos, você tem que "citar"eles (usando caracteres especiais que impedem o shell de interpretá-los). O preenchimento automático irá citá-los automaticamente quando necessário... Exemplo:
(0)samsung-romano:~/tmp/try% touch "hard'n'soft"
Uma maneira de citar aspas simples é com aspas duplas. (E vice-versa, embora seja mais complexo que isso).
(0)samsung-romano:~/tmp/try% ls
hard'n'soft
Agora, se escrever cat hard
e pressionar TAB
:
(0)samsung-romano:~/tmp/try% cat hard\'n\'soft
Barras invertidas são outra forma de citar o caractere a seguir.
Responder2
Bem, como a equipe bash_completion aconselhou, relatei esse comportamento à equipe bash e a resposta deles é:
"Obrigado pelo relatório. Isso será corrigido no bash-4.3."
parece que o bug já é conhecido e devemos apenas esperar.
Responder3
Para expandir um caminho com apóstrofos, adicione um " na frente do caminho.
cd "/home/mallniya/hard
expande sem problemas na expansão de guias.