Существует ли способ установить размер списка предыстории в ударе больше чем к 5 000 строк?

энергия является модальным редактором. Совершите нападки клавиша ESC для вхождения Нормальный (команда) режим затем введите: q и нажимают Enter.

Для выхода, не сохраняя изменений введите: q! и нажмите Enter.

См. также Уход в документации Vim.

25
17.09.2011, 15:56
6 ответов

Это - фактический код, который загружает историю (от bashhist.c вокруг строки 260):

/* Load the history list from the history file. */
void

load_history ()
{
  char *hf;

  /* Truncate history file for interactive shells which desire it.
     Note that the history file is automatically truncated to the
     size of HISTSIZE if the user does not explicitly set the size
     differently. */
  set_if_not ("HISTSIZE", "500");
  sv_histsize ("HISTSIZE");

  set_if_not ("HISTFILESIZE", get_string_value ("HISTSIZE"));
  sv_histsize ("HISTFILESIZE");

  /* Read the history in HISTFILE into the history list. */
  hf = get_string_value ("HISTFILE");

  if (hf && *hf && file_exists (hf))
    {
      read_history (hf);
      using_history ();
      history_lines_in_file = where_history ();
    }
}

Если значения HISTSIZE и HISTFILESIZE установлены, они будут использоваться.

Readline, библиотека, которая на самом деле обрабатывает вход / редактирование строки и история, действительно предлагают средства для поставления ограничения, как большой буфер истории может вырасти. Однако Bash не помещает твердый потолок в это, где значения, немного больше, были бы проигнорированы, по крайней мере, что я мог найти.

Править

Из комментариев, readline был действительно преступник. Я смотрел (скорее по-дурацки) в функциональных параметрах:

существует переменная, названная размером истории, который может быть считан из inputrc файла. та переменная определяет максимальный номер записей истории, сохраненных в списке предыстории. Я проверил, что это - значение в моем локальном inputrc файле к найденному, которому это равняется 5000. Установка его к большему значению решила проблему.

16
27.01.2020, 19:40
  • 1
    , если он не помещает потолок, затем почему установка HISTSIZE к какому-либо значению, больше, чем 5 000, не имеет никакого эффекта на размер списка предыстории после перезапуска оболочки? Если у Вас есть файл истории размера, больше, чем 5 000 строк пробуют установку HISTSIZE в .bashrc к значению, больше, чем 5 000, то перезапускают оболочку и выполняют историю | туалет-l. Вы видели бы, что список предыстории меньше чем или равен 5 000 независимо от HISTSIZE. Однако установка HISTSIZE к любому значению меньше чем 5 000 произвели бы видимый эффект с помощью того же эксперимента. –  Marwan Tanager 17.09.2011, 20:15
  • 2
    Читая GNU readline библиотека documentatin, оказалось, что Вы правы. существует переменная, названная размером истории, который может быть считан из inputrc файла. та переменная определяет максимальный номер записей истории, сохраненных в списке предыстории. Я проверил, что это - значение в моем локальном inputrc файле к найденному, которому это равняется 5000. Установка его к большему значению решила проблему. Спасибо за понимание :-) –  Marwan Tanager 17.09.2011, 21:14
  • 3
    @Marwan :) Я думал это history-size было что-то, что было передано (от журнала изменений RL) к функциям в readline tha t, были в конечном счете названы ударом. Похож мы поняли это вместе. –  Tim Post♦ 17.09.2011, 21:54

Попробуйте обоих HISTFILESIZE и HISTSIZE.

5
27.01.2020, 19:40
  • 1
    я установил HISTFILESIZE, чтобы быть 50000. Проблема с HISTSIZE, который определяет последние строки 'HISTSIZE' в .bash_history, который будет загружен в память при запуске удара и на который можно использовать механизм ctrl-r. –  Marwan Tanager 16.09.2011, 20:33
  • 2
    После того как Вы вошли в систему, если Вы вводите echo "$HISTSIZE $HISTFILESIZE" что Вы видите? –  ztank1013 16.09.2011, 21:41
  • 3
    Это производит: "50000 500 000" –  Marwan Tanager 17.09.2011, 05:28

У меня было то же (или подобное) проблема, но inputrc был прекрасен. В моем случае единственная вещь, которая работала, комментировала HISTSIZE=1000 и HISTFILESIZE=2000 в моем запасе ~/.bashrc - даже при том, что я переопределял их Вар позже в том же файле!

3
27.01.2020, 19:40
[118033] Я думаю, что вы, возможно, натолкнулись на потолок истории вашей операционной системы для HISTSIZE. Из man-страницы для fc/истории в Solaris 10 (работает KSH):[118034]. [118035] [118375][snip]

/usr/bin/fc

  1. Утилита fc перечисляет или редактирует и переисполняет, команды до viously вводится в интерактивный sh.

  2. История команд ссылается на команды по номерам. первый номер в списке выбирается произвольно. Релятор- порядок подчинённости числа его команде не изменится, за исключением того, что когда пользователь входит в систему и никакие другие процессы не получают доступ к список, в который система может сбросить нумерацию на запустить самую старую сохраненную команду под другим номером (обычно 1). Когда номер достигнет значения в HISTSIZE или 32767 (в зависимости от того, что больше), панцирь может обернуть цифры, запуск следующей команды с меньшим номером (обычно 1). Однако, несмотря на эту необязательную обертку чисел, fc будет поддерживать временную последовательность команд. Для например, если четыре команды подряд дают номера 32 766, 32 767, 1 (завернутые) и 2 по мере их выполнения, команда 32 767 считается командой, предшествующей 1, даже хотя его число выше.[118382] [118383][snip]

  3. , что подразумевает, что команда fc может обращаться к 32767 записям в файле истории, что делает ее жестким потолком для количества команд, хранящихся в файле истории. Конечно, YMMV, но я думаю, что вы могли бы проконсультироваться по этому вопросу со своей документацией/страницами руководства операционной системы. Мой 0.02... [118038]

1
27.01.2020, 19:40

Ваша история усекается при первой установке HISTSIZE, так что если она установлена на 5000 раньше, то в вашей ~/. bashrc, или в общесистемном bashrc в /etc, вам нужно прокомментировать их.

8
27.01.2020, 19:40

Изменение этих строк в ~/.bashrcисправило это для меня:

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=5000  

HISTFILESIZE=2000

После этого сохраните файл и перезагрузите файл bashrc

$. ~/.bashrc
5
27.01.2020, 19:40

Теги

Похожие вопросы