사용자 정의 bash 탭 완성


34

cooltool옵션 목록이있는 사용자 정의 콘솔 유틸리티 가 있습니다

fooOption
barOption

tab키 를 눌러 옵션을 자동 완성하는 방법은 무엇입니까?

사용자가 입력했음을 의미합니다

$ ./cooltool foo_

그런 다음를 누릅니다 tab. 그리고

$ ./cooltool fooOption _

나타났다.


1
교차하지 마십시오.
Wuffers

2
이 하나는 마이그레이션되고 다른 하나는 마이그레이션되지 않습니다. 많은 사용자들이 여전히 여러 SE 사이트에 질문을 게시해서는 안된다는 것을 모르고 있다고 생각합니다. 통합 시스템이 아닌 포럼을 분리하는 데 사용되며, 다른 포럼에서 빠른 답변을 얻을 수있는 더 나은 기회를 요청할 수 있습니다.
jcrawfordor

답변:


2

에 대한 bash 완성 스크립트를 작성하십시오 cooltool. bash는 완성 패키지는 예제로 사용할 수있는 많은 인기 프로그램에 대한 스크립트와 함께 제공됩니다.


40

가장 간단한 방법은 .bashrc에 다음을 추가하는 것입니다.

_cooltool()
{
    local cur=${COMP_WORDS[COMP_CWORD]}
    COMPREPLY=( $(compgen -W "fooOption barOption" -- $cur) )
}
complete -F _cooltool cooltool

사용자가 입력 할 때마다 cooltool f[TAB][TAB]_cooltool()함수가 호출됩니다. 현재 부분 단어가 무엇인지 알아 낸 다음 compgen어떤 옵션이 일치하는지 알아냅니다. 이것들은라는 배열에 저장되어 COMPREPLY표시됩니다. 봐 man completeman compgen자세한 내용은.

좋은 튜토리얼을 확인하려면 : Bash Completion Function 작성




2

dogbane의 답변 외에도 다음을 수행 할 수 있습니다.

complete -W "fooOption barOption" cooltool

단순히 문자열의 시작 부분에서 단어 목록을 일치시키려는 경우. 완전하고 compgen은 대부분의 옵션을 공유하는 것 같습니다. 내가 사용하는 명령에서 "문자열의 시작"만 일치하는 것을 보았으므로 _cooltool 함수에서 다음과 같은 다른 작업을 수행 할 수 있다는 것을 알았습니다.

COMPREPLY=( $(grep "$cur" ~/my_potential_args.txt) )

옵션 이름의 아무 곳이나 일치시킵니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.