Описание тега ubuntu-membership
@Дэвид Даи правильно про этот Баш-нить.
Здесь есть соответствующие Баш
код на C.
если (history_lines_this_session <= where_history () || force_append_history)
{
результат = append_history (history_lines_this_session, ВЧ);
history_lines_in_file += history_lines_this_session;
}
еще
{
результат = write_history (ВЧ);
history_lines_in_file = history_lines_this_session;
}
shopt -с histappend
наборы force_append_history
в ненулевое (истинное
).
history_lines_this_session
- это количество команд, которые вы ввели этот интерактивный Баш
сессии. При первом запуске Баш, это 0. Оно увеличивается на 1 каждый раз, когда вы вводите команду, которая сохраняется в истории.
where_history()
- это индекс в памяти истории список, начиная с индекса 0. Он указывает на следующий индекс, чтобы написать историю. Например, когда у Вас 0 история, это будет индекс 0. Если у вас есть 6 линий истории, это будет показатель 6.
При первом запуске Баш
и у вас есть история в вашей HISTFILE
, where_history()
увеличить, но будет ограничен <= HISTSIZE
. Так where_history()
имеет максимальное значение HISTSIZE
.
После прочтения HISTFILE
, where_history()
будет увеличиваться, но history_lines_this_session
все равно будет 0. Когда вы вводите HISTSIZE + 1
количество команд, history_lines_this_session == HISTSIZE + 1
и where_history() == HISTSIZE
(потому что он ограничен по максимуму). На данный момент, (history_lines_this_session <= where_history()) == ложь
, так что истории будут перезаписаны, если histappend
выключен.
Вы можете проверить это в вашей колотить
себя. Если histappend
выключен, как только вы запустите HISTSIZE + 1
количество команд, history_lines_this_session
будет превышать where_history()
по 1 и HISTFILE
будут перезаписаны. Вы должны убедиться, что другие команды не возиться с вашей историей для того, чтобы работать, хотя (бывает на macOS). Используйте следующие команды для отключения команды, которые могут связываться с истории:
ловушка - выйти из
PROMPT_COMMAND=
SHELL_SESSION_HISTORY=0 # только для macOS