Отображать только диапазон записей из истории bash

Отображать только диапазон записей из истории bash

Можно ли установить фиксированное число для команды «history», чтобы отображалось только определенное количество элементов истории, например 100, а не все с начала времен?

решение1

history nпечатает только nстроки истории. Например:

$ history 4
 2000  type history
 2001  help
 2002  help history
 2003  history 4
$

Итак, мы можем создать псевдоним в вашем .bashrc:

alias h="history 100"

От help history:

history: history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...]
    Display or manipulate the history list.

    Display the history list with line numbers, prefixing each modified
    entry with a `*'.  An argument of N lists only the last N entries.

Это полезно, если вы хотите сохранить большой набор истории, возможно даженеограниченный один. СHISTCONTROL=ignoreboth:erasedupsиобратный инкрементный поиск, это особый случай, когда вы действительно выполняете historyкоманду.

решение2

Настроив HISTFILESIZE, HISTSIZE можно ограничить размер истории команд.

Например, HISTFILESIZE=100и HISTSIZE=100. Он ограничит файл истории хранением 100 строк и HISTFILEсохранит вашу текущую команду сеанса в памяти до 100 строк.

При запуске оболочки история инициализируется из файла, названного переменной HISTFILE(по умолчанию ~/.bash_history). Файл, названный значением HISTFILE, при необходимости обрезается, чтобы содержать не более количества строк, указанного значением переменной HISTFILESIZE.

Вы можете добавить HISTFILESIZE=100 и HISTSIZE=100в свой ~/.bashrcфайл. Замените 100 на желаемое число.

Объяснение

HISTFILESIZE=10иHISTSIZE=10

  1. Вы начинаете сеанс.
    1. Ваш HISTFILE (файл, в котором хранится история команд bash) обрезается до HISTFILESIZE=10 строк.
  2. Вы пишете 50 строк.
  3. По завершении 50 команд в списке истории останутся только команды с 41 по 50, размер которых определяется параметром HISTSIZE=10.
  4. Вы завершаете сеанс.
    1. Если histappendэта опция не включена, команды 41–50 сохраняются в файле HISTFILE, который теперь содержит 10 команд, которые содержались в начале, плюс 10 новых записанных команд.
    2. Ваш HISTFILE обрезан и содержит HISTFILESIZE=10 строк.
  5. Теперь в вашей истории 10 команд — последние 10, которые вы ввели в сеансе, который вы только что завершили.
  6. При запуске нового сеанса вы начинаете с 1 с HISTFILE HISTFILESIZE=10.

HISTFILESIZE=10иHISTSIZE=5

  1. Вы начинаете сеанс.
    1. Ваш HISTFILE (файл, в котором хранится история команд bash) обрезается так, чтобы содержать не более HISTFILESIZE=10 строк.
  2. Вы пишете 50 строк.
  3. По завершении 50 команд в списке истории останутся только команды с 46 по 50, размер которых определяется параметром HISTSIZE=5.
  4. Вы завершаете сеанс.
    1. Если histappendэта опция не включена, команды 46–50 сохраняются в файле HISTFILE, который теперь содержит 10 команд, которые содержались в начале, плюс 5 новых записанных команд.
    2. Ваш HISTFILE обрезан и содержит HISTFILESIZE=10 строк.
  5. Теперь в вашей истории 10 команд — 5 из предыдущего сеанса и последние 5, которые вы только что ввели в сеансе, который вы только что завершили.
  6. При запуске нового сеанса вы начинаете с 1 с HISTFILE HISTFILESIZE=10.

HISTFILESIZE=5иHISTSIZE=10

  1. Вы начинаете сеанс.
    1. Ваш HISTFILE (файл, в котором хранится история команд bash) обрезается так, чтобы содержать не более HISTFILESIZE=5 строк.
  2. Вы пишете 50 строк.
  3. По завершении 50 команд в списке истории останутся только команды с 41 по 50, размер которых определяется параметром HISTSIZE=10.
  4. Вы завершаете сеанс.
    1. Если histappendэта опция не включена, команды 41–50 сохраняются в файле HISTFILE, который теперь содержит 5 команд, содержавшихся в начале, плюс 10 новых записанных команд.
    2. Ваш HISTFILE обрезан и содержит HISTFILESIZE=5 строк.
  5. Теперь в вашей истории 5 команд — последние 5, которые вы ввели в сеансе, который вы только что завершили.
  6. При запуске нового сеанса вы начинаете заново с шага 1 с HISTFILE HISTFILESIZE=5.

Это великолепное объяснение от: stackoverflow.com

Связанный контент