O que _expand faz?

12

Eu estava trabalhando com o shell e, por engano, concluí automaticamente tabapós a gravação _e, o que resultou em _expand.

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

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

scristalli
fonte

Respostas:

14

Você pode descobrir o que _expandfaz, 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
}

Essa é uma função no mecanismo de conclusão do bash. Expande tildes ( ~) nos nomes de caminho. In /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.

Experimente em um terminal, digite:

~<tab><tab>

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

~usera     ~userb     ~userc
caos
fonte
1
Obrigado, eu não conhecia o comando type. Não estava claro para mim por que eu não poderia chamar essas funções como _function_name [argument], mas agora entendo que elas servem a seu objetivo como extensões de preenchimento automático, e o fato de que elas aparecem no meu preenchimento automático é simplesmente porque elas são declaradas (mas não são destinadas a isso) para ser chamado diretamente).
scristalli
3
Exatamente a _expandfunção, como todas as outras funções completas, apenas manipula a COMPREPLYmatriz, com base nos valores $curque contêm o padrão de conclusão.
caos