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


19

Je suis sur Debian Jessie 8.6. J'ai remarqué que apt-getla saisie automatique attendue de bash est obtenue en appuyant sur tab pour les packages et la commande, mais lorsque vous essayez de l'utiliser avec aptcela 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?


Quelque chose a fonctionné pour vous?
Lynob

@Lynob J'ai fini par migrer vers Ubuntu, donc je ne peux pas vous aider, désolé.
Andrea

Réponses:


20

Debian n'est pas fourni avec «bash-complét» 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 ( .) sont identiques à l'utilisation du sourcemot - clé dans bash, mais sont plus portables.

    Si vous voulez que cela fonctionne quand vous êtes sudans 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 plutôt les modifications de (1) dans le fichier /etc/bash.bashrc.

Pour tous ceux qui se demandent pourquoi cela fonctionne, le .devant /etc/bash_completionne fait pas référence au répertoire actuel, car il 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, cela .peut être remplacé par la commande source, mais ce n'est pas standardisé par POSIX et est moins portable, donc j'ai tendance à éloigner les gens de son utilisation. Dans ce cas, puisqu'il s'agit spécifiquement d'un programme d'extension de bash, plutôt que de quelque chose qui doit fonctionner dans un shell bourne ou ksh, vous pouvez vous sentir libre de remplacer la sourcelisibilité.


1
J'ai déjà fait ces étapes, mais cela n'a pas aidé. Fonctionne uniquement avec apt-get, mais pas avec apt.
Andrea

@Andrea Oh, désolé, je n'ai pas entièrement lu votre question, je suppose. Je ne suis pas dans ma boîte Debian pour le moment (sous Windows, je n'ai malheureusement que cygwin), mais je vais essayer de le comprendre à partir de ma machine Debian quand je serai de retour à la maison.
Wyatt8740

5

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

3

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


C'est de quoi j'ai besoin. Mais la complétion automatique ne fonctionne pas pour apt, après avoir copié, renommé le fichier apt téléchargé en / usr / share / bash-complétion / achèvements /. Comment le faire fonctionner?
klor

Le fichier pastebin.com/PRBMt3an était dans le saut de ligne Windows CR LF, c'est pourquoi cela n'a pas fonctionné. J'ai dû convertir le format de ligne en saut de ligne Unix LF, alors j'ai travaillé après le démarrage d'un nouveau terminal.
klor

Voici le fichier 'apt' avec un saut de ligne correct: depositedropper.com/apt_1
klor

1

Comment je l'ai résolu

J'ai eu des problèmes de complétion automatique wgetavec la saisie semi-automatique apt-get install wg[TAB][TAB]et j'ai réussi à le résoudre en supprimant le --no-generateparamè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 bash-completion.

Le --no-generateparamètre auquel je fais référence peut être vu dans la ligne ci-dessous, mais j'ai supprimé TOUS --no-generate, non seulement 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 -vavant apt-get install wg[TAB][TAB], ce qui a montré 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)

Lorsque j'ai exécuté apt-cache pkgnames wgsans, --no-generatej'ai correctement obtenu 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.


C'était exactement ce dont j'avais besoin. Merci: D
Ceisc

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.