IT박스

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

itboxs 2020. 8. 2. 17:53
반응형

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


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


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

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

  • Bash 자체에는 complete개별 명령에 대한 완료 메커니즘을 정의하기위한 내장 기능이 있습니다. 현재 명령에 대해 아무것도 정의되어 있지 않으면 파일 이름으로 완료를 사용했습니다 (Ignacio가 말한 것처럼 opendir / readdir 사용).

    자신의 완성을 정의하는 부분은 프로그래밍 가능한 완성 섹션에 설명되어 있습니다. 요컨대, complete «options» «command»일부 명령에 대한 완료를 정의하십시오. 예를 들어 complete -u su말한다 의 인수 완료되면 su현재 시스템의 사용자를 검색, 명령을 .

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

간단하게를 사용하여 현재 bash 환경에 정의 된 기존 완료를 나열하여 complete가능한 것에 대한 인상을 줄 수 있습니다. bash-completion 패키지가 설치되어 있거나 시스템에 이름이 지정되어 있으면 많은 명령에 대한 완료가 설치되고 Wrikken이 말한 것처럼 /etc/bash_completionbash 스크립트가 포함되어 있습니다.이 스크립트는 종종 셸 시작시 실행되어이를 구성합니다. 추가 사용자 정의 완료 스크립트가 /etc/bash_completion.d; 그것들은 모두에서 제공됩니다 /etc/bash_completion.


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

참고 URL : https://stackoverflow.com/questions/5570795/how-does-bash-tab-completion-work

반응형