Comportamiento extraño de autocompletado

Comportamiento extraño de autocompletado

Bueno... estoy muy confundido, porque el único problema real en mi caso es el maldito apóstrofo (').
Situación:La variable PATH en expansión influye en la finalización de palabras, en función de si había apóstrofes en la ruta adicional o no.
Ejemplo:Tengo un archivo exe (llamado "deadbeef") con los derechos exe apropiados, cuya ruta contiene 2 apóstrofes:
/home/mallniya/hard'n'soft/soft/gnu-linux/portable/deadbeef-0.6.0
Especialmente para un experimento puse el mismo archivo en el
/home/mallniya/hardnsoftaa/soft/gnu-linux/portable/deadbeef-0.6.0
Si exporto la primera ruta a la variable $PATH no habrá autocompletado en bash, pero sí en un segundo caso. Cuando escribo en la terminal las primeras letras del programa en el directorio exportado
muerto[TAB]
No se completa en el primer caso, pero cuando uso TAB con la misma palabra en la segunda condición, funciona.
Pero si escribo el comando "deadbeef" en el primer caso manualmente, también se ejecuta.
Es más, amboscualytipoLos comandos indican que el archivo exe existe en ambos casos.
¿¿¿Entonces, cuál es el problema??? ¿Por qué bash procesa los apóstrofes de esta manera?

Respuesta1

Los apóstrofes son caracteres especiales para casi todos los shells (shell es el término que se refiere a los intérpretes de línea de comando, que es el programa que lee lo que escribes y hace lo apropiado).

Respuesta corta: no hagas eso. En el caso de los espacios, es mejor evitar nombres de archivos con significados especiales o caracteres especiales.

Respuesta larga: si quieres usar apóstrofes, tienes que "cita" ellos (usando caracteres especiales que impiden que el shell los interprete). La función de autocompletar los citará automáticamente cuando sea necesario... Ejemplo:

(0)samsung-romano:~/tmp/try% touch "hard'n'soft"

Una forma de citar comillas simples es con comillas dobles. (Y viceversa, aunque es más complejo que esto).

(0)samsung-romano:~/tmp/try% ls
hard'n'soft

Ahora si escribe cat hardy presiona TAB:

(0)samsung-romano:~/tmp/try% cat hard\'n\'soft 

Las barras invertidas son otra forma de citar el siguiente carácter.

Respuesta2

Bueno, como me recomendó el equipo de bash_completion, informé este comportamiento al equipo de bash y su respuesta es:
"Gracias por el informe. Esto se solucionará en bash-4.3".
Parece que el error ya se conoce y deberíamos esperar.

Respuesta3

Para expandir una ruta con apóstrofes, agregue un " delante de la ruta.

cd "/home/mallniya/hard

se expande sin problemas en la expansión de pestañas.

información relacionada