Je travaillais avec Shell et, par erreur, j’ai complété moi-même avec tab après avoir écrit _e
, ce qui a abouti à _expand
.
Que fait cette commande? Je n'ai pas trouvé 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. Au lieu de cela, ils ouvrent plus de questions du même genre à propos de commandes telles que _complete
, _complete_as_root
, etc.
Vous pouvez savoir ce que _expand
fait en tapant
$ 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
}
C'est une fonction du mécanisme d'achèvement de bash. Il développe les tildes (~
) dans les noms de chemin. Dans /etc/bash_completion
se trouve 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 va s'étendre aux noms d'utilisateur, par exemple
~usera ~userb ~userc