Bash 탭 완성은 어떻게 작동합니까?


113

최근 셸에서 많은 시간을 보내고 탭 자동 완성이 어떻게 작동하는지 궁금합니다. 그 뒤에있는 메커니즘은 무엇입니까? bash는 모든 디렉토리의 내용을 어떻게 압니까?


2
확인하고 싶을 수도 있습니다 /etc/bash_completion(적어도 데비안에 많은 마법이 있습니다).
Wrikken 2011

1
@Wrikken : bash_completion은 탭 완성에 따라 다르지만 어떻게 발생하는지는 다릅니다.
Ignacio Vazquez-Abrams 2011

답변:


100

자동 완성에는 두 부분이 있습니다.

  • fixje에서 이미 언급했듯이 readline 라이브러리는 명령 줄 편집을 관리하고 탭을 누를 때 bash를 다시 호출하여 완료를 활성화합니다. 그런 다음 Bash는 가능한 완성 목록을 제공하고 (다음 요점 참조) readline은 이미 입력 된 문자로 명확하게 식별되는만큼의 문자를 삽입합니다. readline 라이브러리를 상당히 구성 할 수 있습니다. Bash의 명령 줄 편집 섹션을 참조하십시오. 자세한 내용은 설명서를 참조하십시오.)

  • Bash 자체에는 complete개별 명령에 대한 완료 메커니즘을 정의하는 내장 기능이 있습니다. 현재 명령에 대해 정의 된 것이 없으면 파일 이름으로 완성을 사용했습니다 (Ignacio가 말했듯이 opendir / readdir 사용).

    자신의 완성을 정의하는 부분은 Programmable Completion 섹션에 설명되어 있습니다. 간단히 말해, complete «options» «command»일부 명령의 완성을 정의합니다. 예를 들어 complete -u su말한다 의 인수 완료되면 su현재 시스템의 사용자를 검색, 명령을 .

    이것이 일반적인 옵션이 다룰 수있는 것보다 더 복잡한 경우 (예 : 인수 인덱스 또는 이전 인수에 따라 다른 완성)을 사용할 수 있습니다 -F function. 그러면 가능한 완성 목록을 생성하는 쉘 함수를 호출합니다. (이것은 예를 들어 git 완성에 사용되며, 하위 명령과 때로는 주어진 옵션에 따라 매우 복잡하고 때로는 브랜치 이름을 사용합니다 (bash가 알지 못함).

간단히를 사용하여 현재 bash 환경에 정의 된 기존 완성을 나열하여 complete가능한 것에 대한 인상을 가질 수 있습니다. bash-completion 패키지가 설치되어 있거나 시스템에 이름이 지정되어 있으면 많은 명령에 대한 완성이 설치되고 Wrikken이 말했듯 /etc/bash_completion이이를 구성하기 위해 쉘 시작시 자주 실행되는 bash 스크립트가 포함됩니다. 추가 사용자 지정 완료 스크립트를에 배치 할 수 있습니다 /etc/bash_completion.d. 그것들은 모두 /etc/bash_completion.


1
매뉴얼 페이지는 셸 내장이 아닌 독립적 인 명령에 대해서만 존재합니다. 그러나 그것은 내가 링크 한 bash 매뉴얼의 일부입니다.
Paŭlo Ebermann

7

기본에 관심이 있다면 Bash는 역사와 기본 완성 기능을 갖춘 readline 을 사용합니다 . 자세한 이해를 원하면 소스를 검사 할 수 있습니다. 또한 readline을 사용하여 완성 된 자체 CLI 인터페이스를 구축 할 수 있습니다.

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