Cosa fa _expand?


12

Stavo lavorando con la shell e, per errore, mi sono compilato automaticamente tabdopo aver scritto _e, il che si è tradotto _expand.

Cosa fa questo comando? Non sono riuscito a trovare una spiegazione online, gli unici riferimenti che ho trovato qui su Ask Ubuntu sono:

Ma non rispondono alla mia domanda. Invece, si aprono altre domande dello stesso tipo sui comandi come _complete, _complete_as_rootecc

Risposte:


14

Puoi scoprire cosa _expandsuccede durante la digitazione

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

Questa è una funzione nel meccanismo di completamento bash. Espande tildes ( ~) nei nomi dei percorsi. In /etc/bash_completionè un commento sulla funzione:

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

Provalo in un terminale, digita:

~<tab><tab>

Si espanderà ai nomi utente, ad esempio

~usera     ~userb     ~userc

1
Grazie, non conoscevo il comando type. Non mi era chiaro il motivo per cui non potevo chiamare queste funzioni come _function_name [argument], ma ora capisco che servono al loro scopo come estensioni di completamento automatico e il fatto che compaiano nel mio completamento automatico è semplicemente perché sono dichiarate (ma non sono destinate essere chiamato direttamente).
scristalli,

3
Esattamente la _expandfunzione, come tutte le altre funzioni complete, manipola semplicemente l' COMPREPLYarray, in base ai valori di $curcui contiene il modello di completamento.
caos,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.