Bugs en la bash completion de Testing

Un nuevo bug se coló la semana pasada en mi Debian Testing (Jessie): la bash completion dejó de funcionar con ciertos ficheros que contienen espacios. Es algo especialmente molesto si estás acostumbrado a manejar nombres de ficheros largos (coff, subtitulos, coff, coff) a través de la línea de comandos, como es mi caso.

Así que tocó investigar un poco. Consultados los logs de aptitude, descubro que el bug surge tras instalarse la actualización a bash 4.3, cuando hasta ese momento el bash empaquetado en Jessie era de la rama 4.2. Consultando la larga lista de bugs de bash veo que hay varios reportes (no fusionados) con el mismo problema o similares. Creo que el más completo es el #740971. En este bug alguien comenta:

I can reproduce (only tested the first case). Indeed, bash-completion appears to cause quite important bash completion problems with 4.3. This has to be related to a similar issue reported by Albert Shih upstream (on the mailing list, there is no upstream ITS): http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00032.html

Y en el enlace apuntado, el mantenedor de GNU bash dice:

I've attached a patch that solves the problem with "empty" completions. It's a start, but it may require more work to capture all of the cases.

Así que en vez de esperar el parche, que puede tardar un poco, voy a dar un truco que nos sirve mientras tanto para salir del paso, y es usar la comilla simple (apostrofe) justo antes del nombre de fichero (incluyendo el path) que queremos completar. Y luego otra vez al final, claro, para cerrar la cadena. En ese entorno entrecomillado sí que funciona la completion del nombre del fichero.

Ojo, este truco, por la razón que sea, no funciona con las comillas dobles, solamente con las simples.

Por último, tenéis una corrección para que no aparezca el mensaje "bash: words: bad array subscript" al hacer un doble TAB en el bug #741479 del paquete bash-completion. No es algo grave, pero es tan fácil de solucionar que merece la pena cambiar a mano la línea indicada del fichero /usr/share/bash-completion/bash_completion.

:wq

blogroll

social