Как я могу получить постоянный dirstack с уникальными записями в zsh?

В Arch Wiki есть эта интересная конфигурация 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 установлен, я нахожу дубликаты записей в pushdignoredups dirs , иногда даже одну и ту же запись повторяется трижды. В Wiki также говорится, что это не сработает с несколькими сеансами zsh, и у меня есть несколько открытых вкладок терминала с запуском zsh, поэтому это может быть причиной проблемы.

Могу ли я каким-либо образом изменить эту функцию, чтобы сохранить только уникальные записи? Является ли это запутанным способом достижения чего-то, что zsh предоставляет более простые способы?

Как я могу иметь постоянную жертву с уникальными записями?

One Solution collect form web for “Как я могу получить постоянный dirstack с уникальными записями в zsh?”

Простой typeset -U dirstack терпит неудачу, поскольку dirstack , несомненно, слишком особенный для обычного уникального ограничения для применения (этот typeset очень удобен для таких вещей, как массив path ). При ближайшем рассмотрении код Arch Wiki страдает от неполной уникальности, dirstack что только dirstack только при его выписывании становится уникальным, а не с PWD и при чтении файла. Так что если PWD содержит что-то также в dirstack , будут созданы дубликаты а затем читайте. Таким образом, самым быстрым решением является применение уникального расширения для чтения:

  dirstack=( ${(uf)"$(< $DIRSTACKFILE)"} ) 

И, возможно, также в файл напишите, что более сложно, так как ему нужна уникальная dirstack минус все, что есть в PWD плюс PWD .

 print -l $PWD ${(u)${dirstack:#$PWD}} >$DIRSTACKFILE 
  • Вкладка вкладок вручную в zsh
  • Как «отменить» rsync -L?
  • встроенные условия для назначения
  • Различные оболочки для интерактивной и неинтерактивной работы
  • Глобус не работает в zsh, но работает в bash
  • Предотвращение отключения терминала от убийства текущей работы в zsh
  • Запустите git fetch после любой команды cd
  • Параметры команды загрузки из файла верхнего уровня
  • Какой интерпретатор оболочки запускает скрипт без shebang?
  • Игнорировать файлы для завершения zsh для SVN
  • Отмена завершения закладки zsh
  • Linux и Unix - лучшая ОС в мире.