간단한 코드가 있습니다 bash_completion
. 그것이 하는 유일한 일은 내가 grcat
then Tab을 입력할 때 /etc/grcat
.
_grcat() {
local word
COMPREPLY=()
if [ 1 -eq "$COMP_CWORD" ]; then
pushd /etc/grcat &>/dev/null || return 1
word="${COMP_WORDS[COMP_CWORD]}"
COMPREPLY=($(compgen -f "$word"))
popd &>/dev/null
fi
}
complete -F _grcat grcat
/etc/grcat
를 제외한 모든 파일이 나열되도록 수정해야 합니다 /etc/grcat/README
.
bash_completion
특정 파일을 어떻게 무시할 수 있나요 ?
답변1
-X
다음과 같은 옵션 도 있습니다 compgen
.
_grcat() {
local word
COMPREPLY=()
if [ 1 -eq "$COMP_CWORD" ]; then
pushd /etc/grcat &>/dev/null || return 1
word="${COMP_WORDS[COMP_CWORD]}"
local filterpat='README'
COMPREPLY=($(compgen -f -X "$filterpat" -- "$word"))
popd &>/dev/null
fi
}
complete -F _grcat grcat
compgen
complete
, 및 와 -p
동일한 옵션을 대부분 허용합니다 -r
.
compgen
또한 결과를 생성하여 일치 항목을 표준 출력에 기록합니다. complete
나중에 사용할 수 있도록 규칙만 저장됩니다.
답변2
~에서여기, 찾으시는 변수는 입니다 FIGNORE
. 다음을 수행할 수 있습니다.
export FIGNORE=$FIGNORE:/etc/grcat/README
Complete
원하는 작업을 수행하기 위해 명령을 사용할 수도 있는 것 같습니다 . Complete
다음을 사용하여 명령에 대한 정보를 봅니다 .여기그리고여기.
complete
실제로 스크립트에서 명령을 수정해 볼 수 있습니다 . 예를 들면 다음과 같습니다.
complete -f -X '/etc/grcat/README' grcat
매뉴얼 페이지 complete
에서
-X filterpat filterpat는 파일 이름 확장에 사용되는 모드입니다. 이전 옵션 및 인수에 의해 생성된 가능한 완성 목록에 적용되며,
filterpat와 일치하는 모든 완성은 목록에서 제거됩니다. 선두! filterpat의 패턴을 무효화합니다. 이 경우 filterpat와 일치하지 않는 완성은 제거됩니다.