Activar el Autocompletado en Línea de Comandos para todos los usuarios

Enviado por the98 el 10 Enero, 2011 - 22:48.


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 substitution

Sin 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/profile

Buscamos 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
fi

Esto ú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.bashrc

Buscamos 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
fi

Esto ú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 ~/.bashrc

Agregamos (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_completion


Espero que esta entrada les sirva.

Saludos y feliz año.