bash_completion에서 특정 파일 제외

bash_completion에서 특정 파일 제외

간단한 코드가 있습니다 bash_completion. 그것이 하는 유일한 일은 내가 grcatthen 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

compgencomplete, 및 와 -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와 일치하지 않는 완성은 제거됩니다.

관련 정보