Почему в моей истории zsh есть дубликаты?

В настоящее время у вас запущена оболочка (TENEX )C shell, в которой нет команды export. Вы не можете sourceиспользовать сценарий Bourne Again или POSIX в оболочках C. Синтаксис оболочки C отличается от синтаксиса оболочки Bourne/POSIX.

Для добавления этих переменных среды в вашу интерактивную оболочку используется команда оболочки C setenv. Автоматическое выполнение этого для оболочек входа включает скрипт ~/.loginоболочки C.

Инструкции по ручной установке на самом деле просто говорят: «Добавьте эти переменные в вашу среду выполнения». Оболочка Bourne Again — это просто «например». Очевидно, что если вы не используете оболочку Bourne Again, а это явно не так, то вы делаете то, что соответствует вашему фактическому выбору оболочки.

-1
22.07.2020, 01:55
2 ответа

Единственная опция, необходимая для обрезки всех дубликатов, это histignorealldups, и она уже установлена, так что да, дубликаты удаляются

but from memory

И вы просматриваете историю, хранящуюся в файле(cat $HISTFILE).

как воспроизвести

Запустите новый экземпляр zsh, сотрите все записи истории и выполните некоторые команды

% zsh -i
% a=( $(setopt) )
% unsetopt $a
% HISTSIZE=0
% HISTSIZE=99
% history
   95  HISTSIZE=99
% setopt INC_APPEND_HISTORY
% ls >/dev/null
% clear
% ls >/dev/null
% history
  113  HISTSIZE=99
  114  history
  115  setopt INC_APPEND_HISTORY
  116  ls >/dev/null
  117  clear
  118  ls >/dev/null

Теперь можно установить опцию histignorealldupsи все дубликаты исчезнут (из памяти):

% setopt histignorealldups
% history
  113  HISTSIZE=99
  115  setopt INC_APPEND_HISTORY
  117  clear
  118  ls >/dev/null
  122  setopt histignorealldups

Но это не значит, что строки были стерты из файла истории:

% cat ~/.histfile | tail -n 10
setopt INC_APPEND_HISTORY
ls >/dev/null
clear
ls >/dev/null
history
setopt histignorealldups
history
setopt histignorealldups
history
cat ~/.histfile | tail -n 10

Чтобы удалить дубликаты из файла, вам придется отредактировать файл.

Я рекомендую вам этого не делать, так как история может совместно использоваться несколькими экземплярами zsh, работающими параллельно. Это не тривиальная проблема.

6
18.03.2021, 23:18

Добавьте следующие строки в ваш файл ~/.zshrc, чтобы избежать повторов в истории

setopt HIST_EXPIRE_DUPS_FIRST
setopt HIST_IGNORE_DUPS
setopt HIST_IGNORE_ALL_DUPS
setopt HIST_IGNORE_SPACE
setopt HIST_FIND_NO_DUPS
setopt HIST_SAVE_NO_DUPS
4
18.03.2021, 23:18

Теги

Похожие вопросы