어느 시점 _files -W $somevar -/
에서 $somevar
. 질문을 단순화하기 위해 $HOME/.local/lib
거기에 다양한 Python 버전에 대한 하위 디렉터리가 있고 실제로 디렉터리가 있는 Python 버전을 완성하고 싶다고 가정해 보겠습니다 $HOME/.local/lib/
.
_files -W $HOME/.local/lib -/
디렉토리 트리는 다음과 같습니다.
.local
├── lib
│ ├── python3.5
│ │ └── site-packages
│ │ ├── somepackage
│ │ ├── somepackage-1.0.1-py2.7.egg-info
│ │ ├── someotherpackage
│ │ └── someotherpackage-1.0.11-py2.7.egg-info
│ ├── python3.6
│ │ └── site-packages
│ │ ├── somepackage
│ │ │ └── __pycache__
│ │ ├── somepackage-0.1-py3.6.egg-info
│ │ ├── someotherpackage
│ │ │ └── __pycache__
│ │ ├── someotherpackage-2018.4.16.dist-info
...
mycommand <TAB>
제안 에 대해 위의 완성을 사용하고 python3.5/
탭 python3.6/
완성에 의해 후행 슬래시가 삽입되고 한 버전을 선택하면 완성이 추가로 제안됩니다 python3.5/site-package
. 이는 실제로 존재하는 디렉토리이므로 올바른 동작입니다. 내 사용 사례에서는 세 번째 디렉터리로 이동하지 않고 $HOME/.local/lib에서 직접 디렉터리를 완료하기만 합니다. 내장된 완성 기능을 사용하여 디렉토리를 완성하지 않고 디렉토리를 완성하는 쉬운 방법이 있습니까? 아니면 glob 표현식을 사용 $HOME/.local/lib/*(/)
하고 원하지 않는 부분을 제거해야 합니까?
답변1
_files -W $HOME/.local/lib -/ -S "" -F "*/*"
작업을 수행합니다: -S ""
접미사 추가를 억제 /
하고 _F "*/*"
하위 디렉토리를 제외합니다(를 통해)._path_files
그리고compadd
)).
-F
스타일을 무시 하게 되는데 ignored-patterns
, 이는 이 접근 방식의 사소한 단점입니다. 더 좋은 방법이 있을 수 있습니다.