web-dev-qa-db-fra.com

Debian - la saisie semi-automatique apt (pas apt-get) ne fonctionne pas

Je suis sur Debian Jessie 8.6. J'ai remarqué ça apt-get obtient l'autocomplétion bash attendue lorsque vous appuyez sur tab pour les packages et la commande, mais lorsque vous essayez de l'utiliser avec apt cela ne fonctionne pas. Je me souviens d'avoir utilisé xubuntu 16.04 où cela fonctionnait, donc je trouve étrange que cela ne fonctionne pas ici. Existe-t-il un moyen de l'activer également pour la commande apt? Si c'est le cas, comment?

20
Andrea

Debian ne vient pas avec "bash-complétement" installé et activé.

Pour résoudre ce problème, exécutez (en tant que root):

apt-get install bash-completion

Ensuite, vous avez deux options. Vous pouvez soit (1) l'activer pour chaque utilisateur pour vous-même, soit (2) l'activer globalement.

  1. Si vous souhaitez l'activer uniquement pour votre utilisateur, modifiez ~/.bashrc - ajoutez ce qui suit:

    if [ -f /etc/bash_completion ]; then
        . /etc/bash_completion
    fi
    

    Pour l'essayer sans vous déconnecter et vous reconnecter, exécutez:

    . ~/.bashrc
    

    Ou ouvrez un nouveau Shell. Essayez ensuite d'utiliser la complétion de tabulation avec apt. Ce point et cet espace au début (.) est identique à l'utilisation du mot clé source dans bash, mais est plus portable.

    Si vous voulez que cela fonctionne lorsque su 'd dans le compte root, faites la même chose dans le répertoire personnel de root (généralement /root).

  2. Pour l'activer globalement, effectuez les modifications de (1) dans le fichier /etc/bash.bashrc au lieu.

À tous ceux qui se demandent pourquoi cela fonctionne, le . devant de /etc/bash_completion ne fait pas référence au répertoire courant, car il y a des espaces autour de lui. Au lieu de cela, il fait évaluer le contenu du fichier donné dans le shell en cours d'exécution, au lieu d'être exécuté dans un nouveau sous-shell. Il est normalisé ici.

Dans Bash, ce . peut être remplacé par la commande source, mais ce n'est pas standardisé par POSIX et est moins portable, donc j'ai tendance à dissuader les gens de l'utiliser. Dans ce cas, comme il s'agit spécifiquement d'un programme d'extension de bash, plutôt que de quelque chose qui doit fonctionner dans un Bourne Shell ou ksh, vous pouvez vous sentir libre de remplacer source par la lisibilité.

19
Wyatt8740

Dans Debian 9 Stretch, éditez simplement /etc/bash.bashrc et décommentez:

# 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
6
4pie0

Copiez ce fichier de configuration depuis Ubuntu:/usr/share/bash-complétion/achèvements/apt dans le même répertoire dans Jessie. Vous pouvez également obtenir le fichier ici: http://Pastebin.com/PRBMt3an

3
minaev

Comment je l'ai résolu

J'ai rencontré des problèmes de saisie semi-automatique lors de la tentative de saisie semi-automatique wget avec apt-get install wg[TAB][TAB] et j'ai réussi à le résoudre en supprimant le --no-generate paramètre des mouches ci-dessous:

/usr/share/bash-completion/completions/apt-cache
/usr/share/bash-completion/completions/apt-get

Il convient de mentionner que ces fichiers ne sont disponibles qu'après l'installation de bash-completion.

Le --no-generate le paramètre auquel je fais référence peut être vu dans la ligne ci-dessous, mais j'ai supprimé TOUS --no-generate, pas seulement à partir de cette ligne: https://github.com/scop/bash-completion/blob/master/completions/apt-get#L28

Comment en suis-je arrivé là?

Je suis arrivé à ce point après avoir exécuté set -v avant apt-get install wg[TAB][TAB], qui montrait que la commande exécutée était:

apt-cache --no-generate pkgnames wg

et la sortie était une erreur:

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

Quand j'ai exécuté apt-cache pkgnames wg sans le --no-generate J'ai correctement reçu la liste pour la saisie semi-automatique:

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

J'espère que cela t'aides.

1
Ruben Alves

Le problème est probablement dû à

Dir::Cache::pkgcache "";
Dir::Cache::srcpkgcache "";

paramètres dans /etc/apt/apt.conf.d. Dans mon cas, cela provient de l'image Debian Docker, voir https://github.com/debuerreotype/debuerreotype/blob/799473bee3d388cf00bd55221b38a9d58bd6a2ba/scripts/debuerreotype-minimizing-config

0
petr-tichy