Autocompletement de la commande apt

Partagez ici vos Trucs et vos Astuces.
Répondre
MicP
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 : 5075
Inscription : 04 avr. 2016, 12:11
Localisation : Madagascar
Status : Hors-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
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
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