확장명이 있거나 인수로 play
파일을 허용하는 명령이 있습니다 .mp4
mkv
play_completion.sh
파일을 만들었습니다./etc/bash_completion.d/
디렉토리 및 확장자 play
의 파일 이름을 자동 완성하는 명령을 원합니다 . 나는 이 문제에 대한 도움을 구했지만 성공하지 못했고 bash 자동 완성에 대한 문서는 꽤 압도적입니다. mp4
mkv
지금까지 나는 이것을 가지고 있습니다 ...
complete -f -X '!*.@(mp4|mkv)' play
그러나 그것을 사용하여 얻은 후에는 source /etc/bash_completion.d/play_completion.sh
디렉토리가 아닌 원하는 확장자를 가진 파일 이름만 자동 완성합니다.
답변1
그냥 추가하세요-o plusdirs
또한 자동 완성 기능이 이전 결과에 디렉터리 이름을 추가하도록 명령을 자동 완성합니다(패턴 일치 무시).
complete -f -o plusdirs -X '!*.@(mp4|mkv)' play
!
부정적인 완료. 이는 자동 경쟁이 우리가 지정한 일치 패턴 이외의 완료 결과를 무시한다는 것을 의미합니다*.@(mp4|mkv)
.@
주어진 패턴 중 적어도 하나와만 일치하도록 자동 완성을 지시합니다. 이를@(pattern-list)
Bash의 확장 전역 변수라고 합니다.*.+(pattern-list)
여기서는 glob을 사용할 수도 있습니다 .
명령의 파일 및 디렉터리 이름을 강제로 완료 play
하고 지정된 패턴에 대해서만 확장하려면 다음을 수행하세요.
complete -d -X '!*@(mp4|mkv)' -f -X '!*.@(mp4|mkv)' play
다음도 작동해야 합니다.
complete -d -f -X '!*.@(mp4|mkv)' play