나는 껍질을 가지고 일하고 있었고 실수로 tab글을 쓴 후 자동 완성되어 _e
결과를 얻었습니다 _expand
.
이 명령은 무엇을합니까? Ask Ubuntu에서 온라인으로 설명을 찾을 수 없었습니다.
그러나 그들은 내 질문에 대답하지 않습니다. 대신, 그들은 같은 명령에 대해 같은 종류의 질문을 더 열고 _complete
, _complete_as_root
등
나는 껍질을 가지고 일하고 있었고 실수로 tab글을 쓴 후 자동 완성되어 _e
결과를 얻었습니다 _expand
.
이 명령은 무엇을합니까? Ask Ubuntu에서 온라인으로 설명을 찾을 수 없었습니다.
그러나 그들은 내 질문에 대답하지 않습니다. 대신, 그들은 같은 명령에 대해 같은 종류의 질문을 더 열고 _complete
, _complete_as_root
등
답변:
_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 완료 메커니즘의 기능입니다. ~
경로 이름에서 물결표 ( )를 확장 합니다. In /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
_expand
다른 함수와 마찬가지로 함수 는 완료 패턴이 포함 COMPREPLY
된 값을 기준으로 배열을 조작합니다 $cur
.
type
. 왜 이러한 함수를로 호출 할 수 없는지 명확하지_function_name [argument]
않았지만 이제는 자동 완성 확장의 목적으로 사용되며 자동 완성에 나타나는 사실은 단순히 선언 된 것이기 때문입니다. 직접 호출).