Bash 자동 완성은 어떻게 작동하나요?

Bash 자동 완성은 어떻게 작동하나요?

표준 유틸리티로 작동하는 bash 자동 완성을 이해할 수 있습니다. 하지만 Oracle SQL 로더와 같은 사용자 정의 프로그램에 대한 자동 완성 기능은 어떻게 수행합니까?

다음 명령에서 Tab 키를 누르면 control=자동으로 제어 파일 이름이 완성됩니다.

sqlldr kshitiz/oracle@XE control=data.ctl data=data.csv bad=data.bad log=data.log

이 시점에서 다른 파일이 아닌 제어 파일을 채워야 한다는 것을 어떻게 알 수 있습니까?

답변1

배쉬의프로그래밍 가능한 완성명령줄을 구문 분석하고 수행 중인 작업을 알아내는 방식으로 작동합니다.

  1. 일부 컨텍스트는 특별하게 처리됩니다. 예를 들어 명령의 첫 번째 단어는 명령 이름으로 완성되고 a 뒤의 내용은 $변수 이름으로 완성됩니다.
  2. 이러한 컨텍스트 외부에서 bash는 명령의 인수를 완성하고 명령의 설정 또는 실패할 경우 명령의 기본 이름을 적용하려고 시도합니다(일반적으로 그렇습니다).

예를 들어 bash는 로 시작하는 명령 이름을 완성합니다. 그 후 bash는 .로 시작하는 변수 이름을 완성합니다. 그런 다음 bash는 명령의 완성 규칙을 적용합니다. 완성 규칙은 범주(사용자, 변수, 파일 등), 파일 이름에 대한 와일드카드 패턴, 실행할 함수나 코드 조각을 지정할 수 있습니다.sqllTabsqllsqlldr $aTabasqlldr Tabsqlldr

완료 규칙은 다음과 같이 정의됩니다.complete내장. Bash는 complete내장 함수가 호출되는 시기나 해당 함수가 포함된 스크립트(있는 경우)를 추적하지 않습니다 . 대부분의 배포판에는배쉬 완료일반적으로 사용되는 명령에 대한 규칙 집합을 제공하는 패키지입니다. 이는 에 대한 호출 complete과 이를 모두 로드하기 위해 읽어야 하는 .bashrc(또는 구현된 경우) /etc/bash.bashrc스크립트를 포함하는 일련의 스크립트 파일 형식을 취합니다 . 이를 위해서는 일반적 . /etc/bash_completion으로 프로그래밍 가능한 완성을 활성화하고 사용 가능한 스크립트를 로드해야 합니다.

표준 패키지에는 이에 대한 지원이 포함되어 있지 않습니다 sqlldr. 이러한 지원이 있는 경우 다른 소스에서 제공되어야 합니다. 이 소스는 유사한 디렉토리에 파일을 배치했을 수도 있고 /etc/bash_completion.d, 를 사용하여 현재 규칙을 볼 .bashrc수 있습니다.complete -p sqlldrsqlldr

tcsh, zsh 및 Fish에는 유사한 메커니즘이 있지만(모두가 tcsh에서 영감을 얻음) 내장, 구문 및 기능이 다릅니다.

관련 정보