BREVE INTRODUCCIÓN
En internet existen distintas alternativas de cómo activar esta función que viene por defecto en muchas distribuciones como Ubuntu, Linux Mint y otras basadas en Debian.
¿De qué función se trata? Se trata de un script que nos permite ahorrar tiempo a la hora de tipear en la línea de comandos (tty, consola o terminal), que funciona en cualquier consola que estemos utilizando (e.g. xterm, xfce4-terminal, gnome-terminal, etc). Consiste en escribir el comienzo de una orden y presionar la tecla < TAB > para que la misma se autocomplete. Hasta ahora esto es algo que es común en cualquier instalación de Debian a la hora de escribir un comando o el nombre de un archivo. Activando bash_completion tendremos también la posibilidad de autocompletar ciertas opciones de los comandos. Por ejemplo, en una instalación sin bash_completion activo, podemos escribir apti < TAB > e inmediatamente aparecerá aptitude. Si escribimos apti < TAB > upd < TAB > no aparecerá "update", a no ser que activemos bash_completion. También sirve para autocompletar el nombre de los paquetes, en el caso que usemos aptitude o APT.
Un "error" que está bastante difundido por Google si uno busca cómo activarlo es incluir una serie de líneas en el archivo /etc/profile. Esto, en mi caso particular, GDM da como resultado un error que no permite que pueda ingresar a mi usuario:
.bashrc: 15: shopt: not found
/etc/bash_completion: 32: [[: not found
/etc/bash_completion: 38: [[: not found
/etc/bash_completion: 51: Bad substitutionSin embargo, si no activamos estas líneas en /etc/profile, no podremos gozar del uso de bash-completion en las tty. Por tanto, explicaré cómo hacer para incluir estas líneas sin que GDM (o cualquier otro Display Manager) se queje.
Por otro lado, si queremos que nuestros Emuladores de Terminales (i.e. xterm) debemos editar /etc/bash.bashrc, ya que con /etc/profile solo lo activaremos en las tty.
Este problema ya fue planteado en el foro, sin embargo quería resumirlo en esta entrada.
ANTES DE COMENZAR
En caso no tener instalado el paquete bash-completion, lo instalamos:
# aptitude install bash-completion
ACTIVAR AUTOCOMPLETADO PARA TODOS LOS USUARIOS EN LAS TTY
Abrimos /etc/profile
# nano /etc/profileBuscamos en /etc/profile las siguientes líneas...
# enable bash completion in interactive shells
#if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
# . /etc/bash_completion
#fi... Y reemplazamos por:
if [ "$BASH" ]; then
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
. /etc/bash_completion
fi
fiEsto último activará bash_completion para todos los usuarios, incluyendo root. Pero sólo lo activará en las TTY, y no en los emuladores de terminal.
Reiniciamos la TTY y listo.
Como verán, al archivo original le hemos agregado un if, que corrobora que el bash_completion se corra solamente cuando estamos en Bash. Sin ese condicional, GDM nos dará el error previamente mencionado, ya que GDM estaría llamando bash_completion, y por algún motivo entra en conflicto con xsession.
ACTIVAR AUTOCOMPLETADO PARA TODOS LOS USUARIOS EN EMULADORES DE TERMINAL
Abrimos /etc/bash.bashrc
# nano /etc/bash.bashrcBuscamos en /etc/bash.bashrc las siguientes líneas...
# enable bash completion in interactive shells
#if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
# . /etc/bash_completion
#fi... Y removemos los "#" (las descomentamos), quedando así:
# enable bash completion in interactive shells
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
. /etc/bash_completion
fiEsto último activará bash_completion para todos los usuarios, incluyendo root. Pero sólo lo activará en los emuladores de terminal, y no en las TTY.
Reiniciamos cualquier terminal y los cambios ya tendrán efecto.
ALTERNATIVA: ACTIVAR BASH_COMPLETION PARA SÓLO UN USUARIO EN EMULADORES DE TERMINAL
Debemos crear (o editar, si es que existe) el archivo ~/.bashrc.
$ nano ~/.bashrcAgregamos (o buscamos si no existen, pero comentadas, al igual que se hace en /etc/bash.bashrc) para que quede así:
# enable bash completion in interactive shells
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
. /etc/bash_completion
fi- Si archivo lo creamos, simplemente agregamos estas líneas.
- Si existe pero no están presentes estas líneas, las agregamos al final del archivo.
- Si existe y estas líneas están, simplemente las descomentamos.
Reiniciamos la consola y los cambios ya tendrán efecto.
ALTERNATIVA: ACTIVAR BASH_COMPLETION CUANDO SE DESEE
Simplemente hay que correr bash_completion en el momento que queremos utilizarlo. Se desactivará una vez que terminemos la sesión en la terminal (con el comando exit) o cerremos la terminal que estemos utilizando si estamos en un entorno gráfico. Para correrlo cuando queramos, hacemos:
$ . /etc/bash_completionEspero que esta entrada les sirva.
Saludos y feliz año.