Que fait _expand?

12

Je travaillais avec le shell, et par erreur, je l'ai complété automatiquement tabaprès avoir écrit _e, ce qui a abouti _expand.

Que fait cette commande? Je n'ai pas pu trouver d'explication en ligne, les seules références que j'ai pu trouver ici sur Ask Ubuntu étaient:

Mais ils ne répondent pas à ma question. , Ils ouvrent à la place plus de questions du même genre sur les commandes comme _complete, _complete_as_root, etc.

scristalli
la source

Réponses:

14

Vous pouvez savoir ce que _expandfait, lors de la frappe

$ type _expand
_expand is a function
_expand ()
{
    if [[ "$cur" == \~*/* ]]; then
        eval cur=$cur;
    else
        if [[ "$cur" == \~* ]]; then
            cur=${cur#\~};
            COMPREPLY=($( compgen -P '~' -u "$cur" ));
            [ ${#COMPREPLY[@]} -eq 1 ] && eval COMPREPLY[0]=${COMPREPLY[0]};
            return ${#COMPREPLY[@]};
        fi;
    fi
}

Il s'agit d'une fonction du mécanisme d'achèvement de bash. Il développe tildes ( ~) dans les chemins d'accès. Dans /etc/bash_completionest un commentaire sur la fonction:

# Expand ~username type directory specifications.  We want to expand
# ~foo/... to /home/foo/... to avoid problems when $cur starting with
# a tilde is fed to commands and ending up quoted instead of expanded.

Essayez-le dans un terminal, tapez:

~<tab><tab>

Il s'étendra aux noms d'utilisateur, par exemple

~usera     ~userb     ~userc
le chaos
la source
1
Merci, je ne connaissais pas la commande type. Je ne savais pas pourquoi je ne pouvais pas appeler ces fonctions comme _function_name [argument], mais maintenant je comprends qu'elles servent leur fonction d'extensions de saisie semi-automatique, et le fait qu'elles apparaissent dans ma saisie semi-automatique est simplement parce qu'elles sont déclarées (mais elles ne sont pas destinées être appelé directement).
scristalli
3
Exactement la _expandfonction, comme toutes les autres fonctions complètes, ne fait que manipuler le COMPREPLYtableau, en fonction des valeurs $curqui contiennent le motif d'achèvement.
chaos