Debian: el autocompletado apt (no apt-get) no funciona

19

Estoy en Debian Jessie 8.6. Noté que apt-getobtiene el autocompletado bash esperado al presionar la pestaña para paquetes y comandos, pero cuando intento usarlo aptno funciona. Recuerdo haber usado xubuntu 16.04 donde funcionaba, así que me parece extraño que no funcione aquí. ¿Hay alguna manera de habilitarlo también para el comando apt? ¿Si es así, cómo?

Andrea
fuente
¿Algo funcionó para ti?
Lynob
@Lynob Terminé mudándome a Ubuntu, así que no puedo ayudarte, lo siento.
Andrea

Respuestas:

19

Debian no viene con 'bash-complete' instalado y habilitado.

Para solucionar esto, ejecute (como root):

apt-get install bash-completion

Entonces, tienes dos opciones. Puede (1) habilitarlo por usuario para usted o (2) habilitarlo globalmente.

  1. Si desea habilitarlo solo para su usuario, edite ~/.bashrc- 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 usar tabulación completa con apt. Ese punto y espacio al principio ( .) es lo mismo que usar la sourcepalabra clave en bash, pero es más portátil.

    Si desea que funcione cuando suestá en la cuenta raíz, haga lo mismo en el directorio principal de la raíz (normalmente /root).

  2. Para habilitarlo globalmente, realice los cambios desde (1) en el archivo /etc/bash.bashrc.

Para cualquiera que se pregunte por qué esto funciona, el .frente /etc/bash_completionno se refiere al directorio actual, ya que tiene espacios a su alrededor. En su lugar, hace que el contenido del archivo dado se evalúe en el shell actualmente en ejecución, en lugar de ejecutarse en un nuevo subshell. Está estandarizado aquí.

En Bash, esto .puede ser reemplazado por el comando source, pero esto no está estandarizado por POSIX y es menos portátil, por lo que tiendo a alejar a las personas 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 de bourne o ksh, puede sentirse libre de sustituir la sourcelegibilidad.

Wyatt8740
fuente
1
Ya hice estos pasos, pero eso no ayudó. Solo funciona con apt-get, pero apt no.
Andrea
@ Andrea Oh, lo siento, supongo que no leí completamente tu pregunta. No estoy en mi caja de Debian en este momento (en Windows, todo lo que tengo es cygwin, desafortunadamente), pero intentaré resolverlo desde mi máquina Debian cuando regrese a casa.
Wyatt8740
4

En Debian 9 Stretch solo 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
4pie0
fuente
3

Copie este archivo de configuración de Ubuntu: / usr / share / bash-completar / completions / apt en el mismo directorio en Jessie. También puede obtener el archivo aquí: http://pastebin.com/PRBMt3an

minaev
fuente
Esto es lo que necesito. Pero la finalización automática no funciona para apt, después de copiar, renombrar el archivo apt descargado a / usr / share / bash-completar / completions /. ¿Cómo hacer que funcione?
klor
El archivo pastebin.com/PRBMt3an estaba en salto de línea de Windows CR LF, por eso no funcionó. Tuve que convertir el formato de línea a salto de línea Unix LF, así que trabajé después de comenzar un nuevo terminal.
klor
Aquí está el archivo 'apt' con el salto de
klor
1

Como lo solucione

Tenía problemas de terminación de auto tratando de autocompletar wgetcon apt-get install wg[TAB][TAB]y me las arreglé para resolverlo mediante la eliminación del --no-generatepará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 solo después de la instalación bash-completion.

El --no-generateparámetro al que me refiero se puede ver en la línea a continuación, pero eliminé TODOS --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 -vanterior a apt-get install wg[TAB][TAB], que mostró que el comando ejecutado era:

apt-cache --no-generate pkgnames wg

y la salida fue un error:

E: Could not open file  - open (2: No such file or directory)

Cuando ejecuté apt-cache pkgnames wgsin el, --no-generateobtuve correctamente la lista para autocompletar:

root@484f5c8f56ba:/# apt-cache pkgnames wg
wgalician-minimos
wget2
wgaelic
wget
wgerman-medical
wget2-dev

Espero que esto ayude.

Ruben Alves
fuente
Eso era exactamente lo que necesitaba. Gracias: D
Ceisc