Номер истории 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) и найдите «историю».

  • Как отключить сообщения в unix, если mesg и chgrp не разрешены?
  • Скопируйте длинный однострочный текст с терминала с нежелательной строкой изменения
  • Почему «shift-tab» приводит к «Escape» в терминале?
  • подсветка синтаксиса emacs не работает на моем SSH-клиенте
  • В какой степени эмуляторы терминалов xterm, xterm-color и linux основаны на VT100?
  • Создание двоичного файла определенной длины
  • Безопасно ли закрывать оболочку, просто нажав «X» или используя «ctrl + d»?
  • Пробел цвет фона при достижении конца терминала
  • Ctrl + c и Ctrl + z для прерывания / приостановки заданий
  • Моделирование READLINE_LINE в Bash <4.0
  • Является ли количество tty максимальным количеством одновременных сеансов?
  • Linux и Unix - лучшая ОС в мире.