저는 zsh 완성을 처음 작성했습니다. 반환된 완성에 표시된 심볼릭 링크를 무시하는 방법은 무엇입니까 _files -W /path/to/folder/
?
답변1
테스트 디렉터리를 채웁니다.
% cd && mkdir foo && cd foo
% touch file1 file2
% mkdir dir1
% ln -s file1 link1
% ln -s dir1 link2
비기호 링크 전역 한정자에 대해서는 ^
@
기호 링크가 무시될 수 있습니다 .
% print *
dir1 file1 file2 link1 link2
% print *(^@)
dir1 file1 file2
그런 다음 사용된 플래그를 사용하여 완료를 수행할 수 -g
있으며 많은 ZSH 완료 함수와 내장 기능은 이러한 간접 참조를 추적해야 합니다._path_files
_files
-g 패턴은 패턴과 일치하는 파일만 완료하도록 지정합니다.
어쩌면:
#compdef foo
_arguments "1:file:_files -W ~/foo -g '*(^@)'" && return 0
그러나 이는 디렉토리를 가리키는 심볼릭 링크에서 수행됩니다.
% foo <<MASHTABKEY>>
dir1/ file1 file2 link2@
% ln -s /etc/passwd
% ln -s /etc
% foo <<MASHTABKEY>>
dir1/ etc@ file1 file2 link2@
~/foo
디렉토리를 가리키는 심볼릭 링크에 문제가 있는 경우 디렉토리의 모든 파일에 대해 다른 공격을 수행해야 합니다.
#compdef foo
_arguments '1:file:_files -W ~/foo' && return 0
그런 다음 all-files
완성 스타일을 지정합니다 foo
.
% zstyle ':completion:*:*:foo:*:*' file-patterns '*(^@):all-files'
% foo <<MASHTABKEY>>
dir/ file1 file2