Блог Федора Сарафанова

Настройка истории bash

Можно облегчить себе пользование терминалом, нехитрым образом настроив bash и используя некоторые удобные команды.

Все команды дописываются в файл ~/bashrc.

Размер истории

HISTSIZE=5000
HISTFILESIZE=10000

Первая определяет количество команд, хранимых в памяти, вторая — в файле.

Запись истории

shopt -s histappend

Если опция histappend выставлена - история команд будет добавлена в файл $HISTFILE, в противном случае файл будет перезаписан. Опция по умолчанию отключена.

Фильтрация истории

HISTCONTROL="ignoredups"

$HISTCONTROL управляет сохранением истории. Есть несколько других полезных опций, например

  • ignorespace, команды которые начинаются с пробела не будут сохраняться
  • erasedups, все предыдущие команды, которые совпадают с текущей будут удалены из истории.

$HISTIGNORE позволяет через точку с запятой записать команды, которые не должны попасть в историю.

Посткоманды

PROMPT_COMMAND="history -n; history -w; history -c; history -r; $PROMPT_COMMAND"

В bash есть одна малоизвестная переменная с названием $PROMPT_COMMAND, назначение которой — выполнение какой-то команды перед выводом приглашения, заданного переменной $PS1. В этой переменной можно задать скрипт, который будет выполняться перед каждым выводом приглашения для новой команды.

Итоговое решение

Такая настройка обеспечивает многотерминальную работу с синхронизацией истории и удалением дубликатов.

HISTSIZE=5000
HISTFILESIZE=40000
shopt -s histappend
HISTCONTROL=ignoredups:erasedups
PROMPT_COMMAND="history -n; history -w; history -c; history -r; $PROMPT_COMMAND"

Чтобы применить настройки без выхода из сессии X, достаточно выполнить

source ~/.bashrc

Удобные команды

Ctrl-R в bash запускает поиск по истории команд.

Команда

cd -

возвращает к последней посещенной директории.

Esc+. вызывает последний упомянутый объект.

Например, если набрать

cat /etc/apt/sources.list

а затем rm и нажать Esc+., то команда будет автоматически завершена:

rm /etc/apt/sources.list