이것아치스 위키zsh 구성에는 다음과 같은 흥미로운 점이 있습니다.
DIRSTACKFILE="$HOME/.cache/zsh/dirs"
if [[ -f $DIRSTACKFILE ]] && [[ $#dirstack -eq 0 ]]; then
dirstack=( ${(f)"$(< $DIRSTACKFILE)"} )
[[ -d $dirstack[1] ]] && cd $dirstack[1]
fi
chpwd() {
print -l $PWD ${(u)dirstack} >$DIRSTACKFILE
}
DIRSTACKSIZE=20
setopt autopushd pushdsilent pushdtohome
## Remove duplicate entries
setopt pushdignoredups
## This reverts the +/- operators.
setopt pushdminus
이렇게 pushdignoredups
설정해도 출력에서 중복된 항목이 발견되며 dirs
때로는 동일한 항목이 3배나 되는 경우도 있습니다. Wiki에서는 이것이 여러 zsh 세션에서 제대로 작동하지 않는다고 계속해서 말하고 있으며 zsh가 실행되는 동안 여러 터미널 탭이 열려 있었기 때문에 이것이 문제의 원인일 수 있습니다.
고유한 항목만 유지하도록 이 기능을 수정할 수 있습니까? 이것은 zsh가 제공하는 더 간단한 방법을 구현하는 복잡한 방법입니까?
고유한 항목만 포함된 영구 디렉토리 스택을 어떻게 가질 수 있습니까?
답변1
단순한 접근 방식은 의심할 여지없이 일반적인 고유 제약 조건을 적용하기에는 너무 구체적이기 typeset -U dirstack
때문에 실패합니다 ( 하지만 배열과 같은 경우에는 유용합니다 ). 자세히 조사해 보면 Arch Wiki 코드는 작성될 때만 고유하고 사용되거나 파일로 읽을 때는 고유하지 않기 때문에 불완전한 고유성 문제를 겪고 있습니다. 따라서 항목도 포함된 경우 복제본이 생성된 다음 읽습니다. 따라서 가장 빠른 해결 방법은 읽기에 고유 확장을 적용하는 것입니다.dirstack
typeset
path
dirstack
PWD
PWD
dirstack
dirstack=( ${(uf)"$(< $DIRSTACKFILE)"} )
어쩌면 파일 쓰기도 있을 수 있는데, 이는 플러스 dirstack
안에 고유한 마이너스가 필요하기 때문에 더 복잡합니다 .PWD
PWD
print -l $PWD ${(u)${dirstack:#$PWD}} >$DIRSTACKFILE