표준 유틸리티로 작동하는 bash 자동 완성을 이해할 수 있습니다. 하지만 Oracle SQL 로더와 같은 사용자 정의 프로그램에 대한 자동 완성 기능은 어떻게 수행합니까?
다음 명령에서 Tab 키를 누르면 control=
자동으로 제어 파일 이름이 완성됩니다.
sqlldr kshitiz/oracle@XE control=data.ctl data=data.csv bad=data.bad log=data.log
이 시점에서 다른 파일이 아닌 제어 파일을 채워야 한다는 것을 어떻게 알 수 있습니까?
답변1
배쉬의프로그래밍 가능한 완성명령줄을 구문 분석하고 수행 중인 작업을 알아내는 방식으로 작동합니다.
- 일부 컨텍스트는 특별하게 처리됩니다. 예를 들어 명령의 첫 번째 단어는 명령 이름으로 완성되고 a 뒤의 내용은
$
변수 이름으로 완성됩니다. - 이러한 컨텍스트 외부에서 bash는 명령의 인수를 완성하고 명령의 설정 또는 실패할 경우 명령의 기본 이름을 적용하려고 시도합니다(일반적으로 그렇습니다).
예를 들어 bash는 로 시작하는 명령 이름을 완성합니다. 그 후 bash는 .로 시작하는 변수 이름을 완성합니다. 그런 다음 bash는 명령의 완성 규칙을 적용합니다. 완성 규칙은 범주(사용자, 변수, 파일 등), 파일 이름에 대한 와일드카드 패턴, 실행할 함수나 코드 조각을 지정할 수 있습니다.sqllTab
sqll
sqlldr $aTab
a
sqlldr Tab
sqlldr
완료 규칙은 다음과 같이 정의됩니다.complete
내장. Bash는 complete
내장 함수가 호출되는 시기나 해당 함수가 포함된 스크립트(있는 경우)를 추적하지 않습니다 . 대부분의 배포판에는배쉬 완료일반적으로 사용되는 명령에 대한 규칙 집합을 제공하는 패키지입니다. 이는 에 대한 호출 complete
과 이를 모두 로드하기 위해 읽어야 하는 .bashrc
(또는 구현된 경우) /etc/bash.bashrc
스크립트를 포함하는 일련의 스크립트 파일 형식을 취합니다 . 이를 위해서는 일반적 . /etc/bash_completion
으로 프로그래밍 가능한 완성을 활성화하고 사용 가능한 스크립트를 로드해야 합니다.
표준 패키지에는 이에 대한 지원이 포함되어 있지 않습니다 sqlldr
. 이러한 지원이 있는 경우 다른 소스에서 제공되어야 합니다. 이 소스는 유사한 디렉토리에 파일을 배치했을 수도 있고 /etc/bash_completion.d
, 를 사용하여 현재 규칙을 볼 .bashrc
수 있습니다.complete -p sqlldr
sqlldr
tcsh, zsh 및 Fish에는 유사한 메커니즘이 있지만(모두가 tcsh에서 영감을 얻음) 내장, 구문 및 기능이 다릅니다.