Как включить хранение истории в zsh?

Написано 15 Ноябрь, 2013 в категории Linux,Ubuntu/Debian/Mint


Долгое время я не обращал внимание на возможности команды history, но со временем объем работы в консоли вырос, и в какой то момент стало очевидно, что нужно задействовать эту возможности оболочки.

По умолчанию история работы в оболочке zsh нигде не сохраняется. С точки зрения безопасности - это правильно, ведь частенько в консоль попадают пароли (например при запуске mysql). Но, в плане удобства, history дает определенные преимущества. Она позволяет вспомнить последовательность настройки чего-либо в прошлом или ускорить ввод повторяющихся команд, поэтому если за своей рабочей машиной сидите только вы и никто к вам через плечо не заглядывает, то удобство, в конечном итоге, перевешивает безопасность.

Включаем и настраиваем history в zshrc. Для этого необходимо отредактировать
/etc/zsh/zshrc - если надо включить историю для всех пользователей. Естественно у каждого пользователя история команд будет своя.
/home/user1/.zshrc - если надо включить история только для конкретного пользователя (в нашем примере это пользователь user1)
Т.к. за своем компьютером я работаю один, то как правило редактирую /etc/zsh/zshrc, хотя в моем случае это разницы практически нет.

Запускаем редактор, например так:

sudo nano /etc/zsh/zshrc

Добавляем в /etc/zsh/zshrc:

# в этом файле будем хранить историю
HISTFILE=~/.zhistory
# столько команд запоминается в одной сессии zsh и будет выведено на экран по команде history
HISTSIZE=1000
# столько команд хранится на диске
SAVEHIST=1000
# при закрытии сессии новые команды будут накапливаться в файле истории
# кроме того в файл истории будут попадать команды из разных сессий 
# если открыто несколько сессий одновременно
setopt  APPEND_HISTORY
# игнорируем дублирующиеся команды
setopt  HIST_IGNORE_ALL_DUPS
# игнорируем лишние пробелы
setopt  HIST_IGNORE_SPACE
#игнорируем пустые строки
setopt  HIST_REDUCE_BLANKS

Теперь все это сохраняем и наслаждаемся историей.

Полезные команды для работы с историей:

# предыдущая команда
[host:~] % !! 
# команда под номером 5
[host:~] % !5 
# 10-я команда с конца (учитывается и команда "!-10")
[host:~] % !-10