Estoy en Debian Jessie 8.6. Me di cuenta de que apt-get
obtiene el autocompletado esperado de bash al presionar la pestaña para paquetes y comandos, pero cuando intento usarlo apt
no funciona. Recuerdo haber usado xubuntu 16.04 donde funcionó, así que me parece extraño que aquí no funcione. ¿Hay alguna manera de habilitarlo apt
también para el comando? ¿Si es así, cómo?
Respuesta1
Debian no viene con 'bash-completion' instalado y habilitado.
Si llega a Debian desde, digamos, un entorno de Ubuntu, donde está preinstalado y habilitado de forma predeterminada, esto puede ser una fuente de cierta confusión.
Para habilitar/'arreglar' esto, ejecute (como root):
apt-get install bash-completion
Entonces tienes dos opciones. Tu también puedes:
1. Habilítelo por usuario para usted o
2. Habilítelo globalmente.
1. Si desea habilitarlo solo para su usuario, edítelo ~/.bashrc
y agregue lo siguiente:
if [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
Para probarlo sin cerrar sesión y volver a iniciarla, ejecute:
. ~/.bashrc
O abra un nuevo shell. Luego intente utilizar la función de tabulación con apt. Ese punto y espacio al principio ( .
) es lo mismo que usar la source
palabra clave en bash, pero es más portátil.
Si desea que funcione cuando su
ingresa a la cuenta raíz, haga lo mismo en el directorio de inicio de la raíz (generalmente /root
).
2.Para habilitarlo globalmente, haga los cambios desde (1) en el archivo /etc/bash.bashrc
en su lugar.
Para cualquiera que se pregunte por qué esto funciona, el .
frente de /etc/bash_completion
sí lo hace.noconsulte el directorio actual, ya que tiene espacios a su alrededor. En cambio, hace que el contenido del archivo dado se evalúe en el shell que se está ejecutando actualmente, en lugar de ejecutarse en un nuevo subshell.Está estandarizado aquí.
En Bash, esto .
puede ser reemplazado por el comando source
, pero POSIX no lo estandariza y es menos portátil, por lo que tiendo a disuadir a la gente de usarlo. En este caso, dado que es específicamente un programa para extender bash, en lugar de algo que necesita funcionar en un shell bourne o ksh
, puedes sustituirlo source
por legibilidad.
Por cierto, este comportamiento (no abrir un sub-shell) es similar a la forma en que los scripts .BAT de DOS/Windows funcionan normalmente, cambiando el estado del shell en el que se ejecutan. Esta es la razón por la que si ingresa cd
a una ruta diferente en un script de shell , no estará en esa ruta cuando el script salga como si estuviera en un .BAT.
Respuesta2
En Debian 9 Stretch simplemente edite /etc/bash.bashrc y descomente:
# enable bash completion in interactive shells
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi
Respuesta3
como lo resolví
Tuve problemas de autocompletar al intentar completar automáticamente wget
y apt-get install wg[TAB][TAB]
logré resolverlo eliminando el --no-generate
parámetro de las moscas a continuación:
/usr/share/bash-completion/completions/apt-cache
/usr/share/bash-completion/completions/apt-get
Vale la pena mencionar que estos archivos están disponibles sólo después de la instalación bash-completion
.
El --no-generate
parámetro al que me refiero se puede ver en la línea siguiente, pero eliminé ALL --no-generate
, no solo de esta línea:
https://github.com/scop/bash-completion/blob/master/completions/apt-get#L28
¿Cómo llegué a este punto?
Llegué a este punto después de ejecutar set -v
el anterior apt-get install wg[TAB][TAB]
, que mostró que el comando ejecutado fue:
apt-cache --no-generate pkgnames wg
y el resultado fue un error:
E: Could not open file - open (2: No such file or directory)
Cuando ejecuté apt-cache pkgnames wg
sin el --no-generate
obtuve correctamente la lista para autocompletar:
root@484f5c8f56ba:/# apt-cache pkgnames wg
wgalician-minimos
wget2
wgaelic
wget
wgerman-medical
wget2-dev
Espero que esto ayude.
Respuesta4
Copie este archivo de configuración de Ubuntu: /usr/share/bash-completion/completions/apt al mismo directorio en Jessie. También puedes obtener el archivo aquí:http://pastebin.com/PRBMt3an