O que a expansão faz?

12

Eu estava trabalhando com o shell e, por engano, eu me autocompletou com a aba depois de escrever _e , o que resultou em _expand .

O que esse comando faz? Eu não consegui encontrar uma explicação online, as únicas referências que encontrei aqui no Ask Ubuntu foram:

Mas eles não respondem a minha pergunta. Em vez disso, eles abrem mais perguntas do mesmo tipo sobre comandos como _complete , _complete_as_root , etc.

    
por Numbers 29.09.2015 / 09:32

1 resposta

14

Você pode descobrir o que o _expand faz ao digitar

$ 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
}

Esta é uma função no mecanismo de conclusão do bash. Ele expande tildes ( ~ ) em nomes de caminho. Em /etc/bash_completion é um comentário sobre a função:

# 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.

Tente em um terminal, digite:

~<tab><tab>

Ele será expandido para os nomes de usuário, por exemplo

~usera     ~userb     ~userc
    
por chaos 29.09.2015 / 09:46