저는 CLI 유틸리티를 작성 중입니다.환경 세트, 사용법은 다음과 같습니다: envset [ENVSET-OPTIONS] [SETNAME] [--] [CMD] [ARGS]...
.
기본적으로 구성 파일에 정의된 일련의 환경 변수를 사용하여 명령을 실행합니다(이미npm 패키지이름은 같지만 다른 기능 세트를 사용하여 Perl에서 유틸리티를 구현하고 있습니다.
에 대한 탭 완성 기능을 제공하고 싶습니다 envset
. 완료는 쉘 함수에 의해 처리됩니다 _envset
. 다음과 같으면 좋을 것 같습니다( ^
눌렀을 때 커서의 위치를 나타냄) Tab
.
% envset mycolors -- ls -^
_envset
완전한 답변 ls
(및 가능한 ls 명령줄 옵션 목록)을 반환할 수 있습니다. bash가 나에게 반환하도록 하는 쉬운 방법이 있습니까?
그렇지 않으면 다음과 같은 작업을 수행해야 합니다 _envset
(완벽하지는 않지만 대부분의 경우 충분합니다).
출력을 구문 분석
complete
하여 명령(위 예에서ls
)이 완료되는 방법을 설명하는 항목을 찾습니다. 그렇지 않은 경우-D
(기본 처리기)를 사용하여 항목을 찾습니다 .함수(-F)에 의해 명령이 완료되면 이 함수가 호출됩니다(COMP_WORDS 및 COMP_CWORD가 적절하게 설정된 후). 함수에서 COMPREPLY를 반환합니다.
외부 명령(-C)에 의해 명령이 완료되면 명령을 실행합니다(COMP_LINE 및 COMP_POINT를 적절하게 설정한 후). 출력 라인을 캡처하고 COMPREPLY를 설정합니다.
다른 유형의 핸들러(-W, -G 등)에 대해서도 마찬가지입니다. -F, -C, -W 및 -A를 처리하면 대부분의 경우를 다룰 수 있다고 생각합니다.
124를 반환하는 기본 핸들러에는 특별한 경우가 있습니다. 즉,
complete
원하는 명령에 대해 핸들러가 이미 정의되어 있는지 확인하려면 1단계부터 다시 시작해야 합니다.