Как я могу получить постоянный 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 предоставляет более простые способы?

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

  • Получите вход от редактора (vim / nano / emacs / textmate?)
  • Как отобразить все команды unix, доступные в системе?
  • дождитесь выхода хрома, прежде чем продолжить сценарий оболочки
  • tmux перестала нормально работать с zsh и oh-my-zsh
  • POSIX-совместимый / кросс-shell-способ для получения версии запущенной оболочки?
  • bash: rsync: команда не найдена
  • Не удалось обновить / обновить пакет Oh-My-Zsh с помощью команды `sudo pacman -S Oh-My-Zsh`
  • Как я могу заполнить -N числовой параметр?
  • 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 
    Interesting Posts

    GNOME 3 – нижняя панель скрывается – как ее отобразить или изменить поведение

    Как изменить точки монтирования

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

    Программа не может разрешить имя хоста, если она запущена перед первым успешным подключением к Интернету

    a.out – сегмент данных и текстовый сегмент являются смежными, если текстовый сегмент не используется совместно. Почему это так?

    Установка Solaris 10 на KVM постоянно перезагружается

    Как разбить файл, например split на stdout, для подключения к команде?

    Как стереть или записать нули на жесткий диск с помощью / dev / sg2

    OpenVPN: нажмите маршрут к клиенту с другим шлюзом

    Захват вывода curl после строки в файл

    Использовать тот же IP-адрес для 2 адаптеров Ethernet в разных физических сетях

    удаление ядер ядра

    Могу ли я заставить vim менять поведение своего курсора?

    Подсчет массива в два раза превышает ожидаемое количество элементов

    начать nginx при загрузке с помощью systemd

    Linux и Unix - лучшая ОС в мире.