Comportamento estranho de preenchimento automático

Comportamento estranho de preenchimento automático

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 harde 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.

informação relacionada