Autocompletement de la commande apt

Partagez ici vos Trucs et vos Astuces.
Répondre
MicP
Modérateur
Modérateur
Messages : 896
Inscription : 16 avr. 2016, 22:14
Status : Hors-ligne

Je ne sais pas pourquoi, mais sous debian la commande apt n'a pas (pas encore…) de fichier d'autocompletement
Par contre, j'ai constaté que ce fichier existe chez ubuntu.

Ci-dessous, le contenu du script récupéré et installé sur ma machine : /etc/bash_completion.d/apt

Code : Tout sélectionner

# Debian apt(8) completion                             -*- shell-script -*-

_apt()
{
    local sourcesdir="/etc/apt/sources.list.d"
    local cur prev words cword
    _init_completion || return

    # see if the user selected a command already
    local COMMANDS=(
        "list"
        "search"
        "show"
        "install" "remove" "purge" "autoremove"
        "update"
        "upgrade" "full-upgrade" "dist-upgrade"
        "edit-sources"
        "help")

    local command i
    for (( i=0; i < ${#words[@]}-1; i++ )); do
        if [[ ${COMMANDS[@]} =~ ${words[i]} ]]; then
            command=${words[i]}
            break
        fi
    done

    # supported options per command
    if [[ "$cur" == -* ]]; then
        case $command in
            install|remove|purge|upgrade|dist-upgrade|full-upgrade|autoremove)
                COMPREPLY=( $( compgen -W '--show-progress
                  --fix-broken --purge --verbose-versions --auto-remove
                  --simulate --dry-run
                  --download
                  --fix-missing
                  --fix-policy
                  --ignore-hold
                  --force-yes
                  --trivial-only
                  --reinstall --solver' -- "$cur" ) )
                return 0
                ;;
            update)
                COMPREPLY=( $( compgen -W '--list-cleanup 
                  ' -- "$cur" ) )
                return 0
                ;;
            list)
                COMPREPLY=( $( compgen -W '--installed --upgradable 
                  --manual-installed
                  -v --verbose
                  -a --all-versions
                  ' -- "$cur" ) )
                return 0
                ;;
            show)
                COMPREPLY=( $( compgen -W '-a --all-versions
                  ' -- "$cur" ) )
                return 0
                ;;
        esac
    fi

    # specific command arguments
    if [[ -n $command ]]; then
        case $command in
            remove|purge|autoremove)
                if [[ -f /etc/debian_version ]]; then
                    # Debian system
                    COMPREPLY=( $( \
                        _xfunc dpkg _comp_dpkg_installed_packages $cur ) )
                else
                    # assume RPM based
                    _xfunc rpm _rpm_installed_packages
                fi
                return 0
                ;;
            show|list)
                COMPREPLY=( $( apt-cache --no-generate pkgnames "$cur" \
                    2> /dev/null ) )
                return 0
                ;;
            install)
                COMPREPLY=( $( apt-cache --no-generate pkgnames "$cur" \
                    2> /dev/null ) )
                _filedir "*.deb"
                return 0
                ;;
            edit-sources)
                COMPREPLY=( $( compgen -W '$( command ls $sourcesdir )' \
                    -- "$cur" ) )
                return 0
                ;;
        esac
    fi

    # no command yet, show what commands we have
    if [ "$command" = "" ]; then
        COMPREPLY=( $( compgen -W '${COMMANDS[@]}' -- "$cur" ) )
    fi

    return 0
} &&
complete -F _apt apt

# ex: ts=4 sw=4 et filetype=sh
Avatar de l’utilisateur
lol
Site Admin
Site Admin
Messages : 4967
Inscription : 04 avr. 2016, 12:11
Localisation : Madagascar
Status : En ligne

Hello,

J'ai bien l'autocomplètement sur ma SID;

Code : Tout sélectionner

root@tor:~# apt 
autoclean     changelog     dist-upgrade  full-upgrade  list          purge         search        source
autoremove    clean         download      help          moo           rdepends      show          update
build-dep     depends       edit-sources  install       policy        remove        showsrc       upgrade
/usr/share/bash-completion/completions/apt
# Debian apt(8) completion -*- shell-script -*-


Tout comme sur mes Jessie:

Code : Tout sélectionner

# apt
apt                           apt-get                       apt-listbugs
apt-cache                     aptitude                      apt-listchanges
apt-cdrom                     aptitude-create-state-bundle  apt-mark
apt-config                    aptitude-curses               apt-show-versions
apt-extracttemplates          aptitude-run-state-bundle     apt-sortpkgs
apt-ftparchive                apt-key
Règles d'usage du forum. Signalez si vous avez posté votre question sur un autre forum. Explications ici
Debian Unstable. Mate/LXQT. Dieu, en créant l'homme, a quelque peu surestimé ses capacités.
MicP
Modérateur
Modérateur
Messages : 896
Inscription : 16 avr. 2016, 22:14
Status : Hors-ligne

…J'ai bien l'autocomplètement sur ma SID; …
Ah bein zut alors : Je ne comprends pas pourquoi il n'est toujours pas présent dans les dernières machines virtuelles que j'ai créé il y a 4 jours…
Ça m'étonnait aussi qu'ubuntu l'ait et pas debian. Mais il va me falloir trouver pourquoi il ne s'est pas installé chez moi.
Avatar de l’utilisateur
lougy
Membre
Membre
Messages : 11
Inscription : 09 mai 2016, 10:42
Status : Hors-ligne

Sallut Lol,
tu as l'auto completion pour la liste des commandes sur ton shell, mais pas la liste des paramètres passés à la commande.
cf. https://www.mistra.fr/tutoriel-shell-ba ... etion.html

Micp, une fois que tu as fait la config, il faut fermer et ouvrir la session pour que le fichier de config modifié soit pris en compte.
MicP
Modérateur
Modérateur
Messages : 896
Inscription : 16 avr. 2016, 22:14
Status : Hors-ligne

Ou alors, sans même fermer la fenêtre de terminal :

Code : Tout sélectionner

source /etc/bash_completion
(on peut aussi remplacer la commande source par un simple point .)

Code : Tout sélectionner

. /etc/bash_completion
C'est ce que j'avais proposé dans ce fil à l'époque
Répondre