История команд в Zsh

62

Как Zsh отслеживает историю команд?

Я вижу два файла в моем домашнем каталоге: .zhistoryи .zsh_history. В чем разница между ними? Файлы, кажется, содержат всю мою историю. Zsh продолжает добавлять строки к одному из них навсегда ? Разве это не сделает поиск по истории слишком медленным?

Могу ли я безопасно сделать эти файлы символическими ссылками на другое место? (например, git-репозиторий для отслеживания изменений в истории)

Амелио Васкес-Рейна
источник
Проверьте ваши ~/.zshrcи / или /etc/zshrcварианты описаны там zsh.sourceforge.net/Guide/zshguide02.html#l17
У

Ответы:

79

Zsh сохраняет строки ввода (возможно, с информацией о времени) в файле, указанном переменной HISTFILE. Это должно быть абсолютное имя файла (иначе оно будет интерпретировано относительно того каталога, который является текущим в данный момент).

Zsh не имеет встроенного значения по умолчанию для HISTFILE. В дистрибутив zsh входит мастер настройки для новых пользователей, который имеет ~/.histfileвстроенное значение , поэтому пользователи zsh получают его по умолчанию. Oh-my-zsh поставляется с HISTFILE=.zhistoryпредустановкой. Похоже, вы пробовали zsh как с настройкой по умолчанию, так и с oh-my-zsh. Проверьте свои .zshrc(или даты файла), чтобы увидеть, какой из них вы используете в настоящее время.

То, как zsh открывает файл, и, следовательно, что произойдет, если это символическая ссылка, зависит от нескольких параметров.

  • Если один из параметров append_history(установлен по умолчанию), inc_append_historyили share_historyзадан, или когда история явно сохранена с помощью fc -AI, zsh добавляет к существующему файлу.
    Обратите внимание, что даже при этих настройках zsh иногда перезаписывает файл, как описано ниже, чтобы урезать его до размера.
  • В противном случае, если опция hist_save_by_copyустановлена ​​(она установлена ​​по умолчанию с zsh 5.0, но не существует в 4.2), zsh записывает временный файл, а затем перемещает его на место после завершения. В этом случае, если файл истории был символической ссылкой, новый файл заменяет символическую ссылку.
  • В противном случае zsh перезаписывает существующий файл на месте.

Вместо того, чтобы указывать zsh на символическую ссылку, укажите, HISTFILEкуда вы хотите поместить файл истории.

Сколько строк истории хранится, настраивается через переменные HISTSIZEи SAVEHIST. HISTSIZEмаксимальное количество строк, хранящихся в сеансе, и SAVEHISTмаксимальное количество строк, хранящихся в файле истории.

Чтобы вообще сохранить некоторую историю, вам нужно установить и то, HISTFILEи другое SAVEHIST, так как значение по умолчанию равно SAVEHIST0. Вы также можете увеличить HISTSIZE(с zsh 5.0 значение по умолчанию - только 30).

Жиль "ТАК - перестань быть злым"
источник