Номер истории Bash не начинается с 1?

Я настраивал свой запрос bash (я на OS X 10.7), когда я наткнулся на что-то странное. В пределах моей подсказки я включил!, Который должен дать мне номер истории. Однако номер истории всегда начинается с 501, а не 1. Это верно, даже если я перезапущу терминал.

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

3 Solutions collect form web for “Номер истории Bash не начинается с 1?”

От человека bash:

On startup, the history is initialized from the file named by the vari‐ able HISTFILE (default ~/.bash_history). The file named by the value of HISTFILE is truncated, if necessary, to contain no more than the number of lines specified by the value of HISTFILESIZE. [...] When an interactive shell exits, the last $HISTSIZE lines are copied from the history list to $HISTFILE. 

Хотя этот текст достаточно ясен, давайте немного проиграем пример (это deb-система, но bash – bash).

Статус моей истории прямо сейчас:

 ~$ set | grep HIST HISTCONTROL=ignoredups:ignorespace HISTFILE=/home/hmontoliu/.bash_history HISTFILESIZE=2000 HISTSIZE=1000 

Поскольку HISTFILESIZE – 2000, а HISTSIZE – 1000, доступны только последние 1000 строк HISTFILE, чтобы вы могли ошибочно создать впечатление, что моя история начинается с 1000.

 ~$ history | head -1 1000 if i=1; then echo $i; done ~$ history | wc -l 1000 

Но на самом деле HISTFILE хранит последние 2000 команд:

  ~$ wc -l $HISTFILE 2000 /home/hmontoliu/.bash_history 

Если вы считаете, что это раздражает, вы можете равняться HISTSIZE и HISTFILESIZE

 ~$ echo "export HISTSIZE=$HISTFILESIZE" >> .bashrc ~$ bash -l ~$ history | head -1 1 ls ~$ history | wc -l 2000 ~$ set | grep HIST HISTCONTROL=ignoredups:ignorespace HISTFILE=/home/hmontoliu/.bash_history HISTFILESIZE=2000 HISTSIZE=2000 

Окончательный намек: вы должны запустить help history чтобы просмотреть действия, которые вы можете сделать с вашей историей.

Ответ от hmontoliu неплохой, это всего лишь версия TL; DR.

История bash всегда поднимается там, где вы остановились. Он сохраняет полупостоянную историю команд, запущенных в файле в вашем домашнем каталоге. Каждый раз, когда вы запускаете оболочку bash, она загружает этот файл истории, и вы можете прокручивать до команд, выполняемых на предыдущих сеансах. Если в истории было 274 предыдущих команды, ваш номер истории команд в новой оболочке начнется с 275.

Файл истории усечен до максимальной длины, заданной переменной среды $HISTFILESIZE . По-видимому, он обрезал ваш файл истории максимум на 500 строк, поэтому каждая новая оболочка начинается с 501. Предыдущие элементы истории представляют собой коллекцию из последних 500 элементов из предыдущих оболочек.

История сохраняется, по умолчанию, ~/.bash_history . История интерактивной оболочки сохраняется в файле при выходе из нее, в зависимости от настроек в оболочке. Прочтите man-страницу для bash (1) и найдите «историю».

  • Как получить настоящее имя управляющего терминала?
  • Как проверить, может ли bash печатать цвета
  • Клавиши управления и увеличения / уменьшения в терминале для использования emacs
  • Моделирование READLINE_LINE в Bash <4.0
  • Как я могу ввести команду для выполнения, когда текущая команда завершена?
  • Настройка режима ядра против Framebuffer?
  • Всякий раз, когда я набираю неправильную команду, мой терминал пытается запустить эту команду в фоновом режиме
  • Debian - Как изменить цвета фона терминала
  • Как настроить стрелку, чтобы перейти к предыдущей команде в максимумах?
  • Аппаратный код (ы) из команды «датчики»
  • ssh от экрана приводит к неизвестной ошибке терминала
  • Linux и Unix - лучшая ОС в мире.