Як не допустити, щоб Баш змінив історію?


26

Якщо натиснути на клавіатурі стрілки вгору або вниз, а потім змінити щось із моєї історії, це зміниться назавжди. Навіть якщо натиснути Ctrl-C, а потім спробувати підняти його знову, це все одно зміниться - я втратив цей запис у своїй історії.

Як я можу запобігти цьому?


3
Я люблю заголовок цього питання. Ви насправді можете змінити історію, і ви скаржитеся? Що з тобою?!
Даніель Бек

@Daniel: Lol, так ... я маю на увазі, це ніби я змінюю своє минуле. Явно безглуздо, і через деякий час це стає смішно дратує. : \
Мехрдад

Btw, якщо ви замість цього використовуєте 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", "Лінія читання" скасує всі зміни в рядках історії перед поверненням при виконанні рядка прийому. За замовчуванням рядки історії можуть бути змінені та зберігати окремі списки скасування для всіх викликів для перегляду. За замовчуванням ' off'.


Примітка:

Якщо для ~/.inputrcвстановлення створений новий файл revert-all-at-newline, пам’ятайте, що bash використовуватиме параметри перегляду рядків у цьому файлі замість будь-яких параметрів, які можуть бути у файлі /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.