Как не дать Bash изменить историю?


26

Если я нажимаю стрелки вверх или вниз на клавиатуре, а затем изменяю что-то из моей истории, это меняется навсегда. Даже если я нажму Ctrl-C, а затем попробую снова вызвать его, он все равно изменится - я потерял эту запись в своей истории.

Как я могу предотвратить это?


3
Мне нравится название этого вопроса. Вы действительно можете изменить историю, и вы жалуетесь? Что с тобой не так?!
Даниэль Бек

@Daniel: Lol, да ... я имею в виду, как будто я меняю свое прошлое. Совершенно бессмысленно, и через некоторое время это становится до смешного раздражающим. : \
Мердад

Кстати, если вы используете вместо этого history-search-xxx , поведение будет другим. Может быть, это что-то для вас?
Даниэль Бек

@Daniel: Это действительно полезно - большое спасибо. Но все же я хотел бы знать ответ на этот вопрос, потому что иногда команды не очень похожи друг на друга, и это не работает.
Мердад

Поиск по истории с пустым приглашением работает так же, как обычная история предыдущая / следующая, т.е. отображает все записи.
Даниэль Бек

Ответы:


17

Вы хотите настройку readline:

set revert-all-at-newline on

Вы можете либо вставить его ~/.inputrc(см. Примечание ниже), либо вставить bind 'revert-all-at-newline on'свой ~/.bashrc.

Демо-версия:

$ man bash
$ bind 'set revert-all-at-newline on'
$ man bsh # up arrow and edit
No manual entry for bsh
$ man bash # three up arrows

Более подробная информация находится на странице руководства Bash :

revert-all-at-newline

Если установлено значение ' on', Readline отменит все изменения в строках истории перед возвратом при выполнении accept-line. По умолчанию строки истории могут быть изменены и сохраняют отдельные списки отмены при вызовах readline. По умолчанию это « off».


Заметка:

Если новый ~/.inputrcфайл создается с целью настройки revert-all-at-newline, помните, что bash будет использовать настройки readline в этом файле вместо любых настроек, которые могут быть в файле /etc/inputrc. То есть любые настройки, указанные в /etc/inputrc, больше не будут действовать. Поэтому, если /etc/inputrcфайл существует, рекомендуется начать ~/.inputrcсо строки:

$include /etc/inputrc


Ты потрясающий, это именно то, что мне нужно. Я больше не хочу бить мой монитор. : D +1000000 (желаю)
Мердад

5

Я вхожу:

ls /tmp

- замечательно. Теперь я не хочу входить

ls /temp 

и может помешать ему войти в историю, поэтому помешает перезаписать ls / tmp, если я запускаю команду с пробелом:

 ls /temp

Трудно увидеть, но если вы это знаете ...

Контролируется

export HISTCONTROL=ignoredups
export HISTCONTROL=ignoreboth

ignoredups игнорирует только дублированные команды, ignoreboth игнорирует пробелы в начале строки, что полезно, чтобы скрыть в противном случае невидимые пароли.

Но, может быть, вы ищете решение, где вы заканчиваете обеими командами, неизмененной старой и новой. Моя версия bash или настроек ведет себя так, но я не знаю, что отличается от вашей.


Ха; Я всегда предполагал, что не сохранение команд с пробелом было ошибкой. Спасибо. :)
sarnold
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.