Что делает _expand?
Я работал с оболочкой, и по ошибке я автоматически заполнил вкладку после записи _e
, что привело к _expand
,
Что делает эта команда? Я не мог найти объяснение в Интернете, единственные ссылки, которые я мог найти здесь на Ask Ubuntu, были:
- Не могу изменить приглашение zsh
- Функциональность автозаполнения терминала может совпадать только с самого начала?
Но они не отвечают на мой вопрос. Вместо этого они открывают больше вопросов того же рода о командах, таких как _complete
, _complete_as_root
, так далее.
1 ответ
Решение
Вы можете узнать, что _expand
делает, когда печатать
$ 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
}
Это функция в механизме завершения bash. Расширяет тильды (~
) в путевых именах. В /etc/bash_completion
комментарий о функции:
# 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.
Попробуйте в терминале, наберите:
~<tab><tab>
Это расширится до имени пользователя, например
~usera ~userb ~userc