Як зупинити редагування історії bash, коли я повторно використовую та змінюю запис?


20

Деякі екземпляри bash змінюють історію команд при повторному використанні та редагуванні попередньої команди, інші, очевидно, ні. Я шукав і шукав, але не можу знайти нічого, що б сказало, як не допустити зміни команд в історії під час їх повторного використання та редагування.

Є такі питання , як цей , але здається , що сказати , як впоратися з історією редагуються. Я нещодавно натрапив на екземпляр bash, який редагує історію, коли ви повторно використовуєте команду - усі попередні bash оболонки, які я використовував, були налаштовані так, щоб я не змінював історію при повторному використанні. і відредагуйте команду. (Можливо, я просто не приділяв належної уваги історії моїх оболонок протягом останніх 15 років або близько того ...)

Отже, це, мабуть, найкраще питання: МОЖЕ Я сказати Башу ніколи не змінювати історію - і якщо так, то як?


Ви можете використовувати history -pрозширення історії, не впливаючи на файл історії. Ви можете зробити history -sте ж саме і додавання до історії без виконання. Ви можете зробити, HISTIGNORE='start of a command I never want in history.*:command2.*'щоб певні команди не були в історії.
mikeserv

1
Чи не set revert-all-at-newline onвирішує проблему питання, на яке ви посилаєтесь? Чи можете ви показати, як відтворити проблему? Зауважте, що ви також можете використовувати zshдля поведінки, що більше відповідає тому, що ви хочете.
Stéphane Chazelas

@mikeserv Переглядаючи сторінку man, history -pщось, що я повинен був би зробити для кожної команди, яку я хочу повторно використовувати - це правильно? Якщо так, то це не зовсім те, що я шукаю. Як я вже згадував, я використовував екземпляри bash, які ніколи не змінюють історію при повторному використанні та редагуванні команди.
Річард Уайсман,

@ StéphaneChazelas Ні, я не думаю, що revert-all-at-newlineце саме те, що мені потрібно. Якщо я редагую команду і натискаю CTRL-C, щоб скасувати її, я також не хочу, щоб це впливало на історію. Мені ніколи раніше не доводилося налаштовувати bash, щоб не змінювати історію, що є частиною причини, коли я плутаюсь, чому іноді свіжа установка поводиться в один спосіб, а іноді в інший. До речі, для екземпляра, який не редагує історію при повторному використанні команди, bind -V | grep revertвказується на те, що revert-all-at-newlineвстановлено значення "вимкнено".
Річард Вісман

2
Насправді це має дуже мало спільного bash. Вся справа в читанні. Існують різні реалізації readlineбібліотеки, і вона також має власний набір налаштувань (МНОГО їх) та власний файл конфігурації. Я точно не впевнений, чи це налаштування чи просто різниця в реалізації, але вам слід шукати документацію, пов’язану з читанням ліній, а не bash.
orion

Відповіді:


9

Виявляється, revert-all-at-newlineце відповідь. Мені потрібно було включити set revert-all-at-newline onу свій ~/.inputrcфайл, оскільки використання setкоманди у баш-рядку не мало ефекту. (Тоді, звичайно, мені довелося запустити нову оболонку.)

Крім того, я виявив, що ~/.inputrcзавантажується замість того, /etc/inputrc якщо він присутній, це означає, що будь-які параметри за замовчуванням, визначені в останньому, більше не активні під час створення ~/.inputrc. Щоб виправити це, почніть ~/.inputrcз $include /etc/inputrc.

Завдяки @ StéphaneChazelas за те, що він спрямовував мене в правильному напрямку.


0

У ~ / .bashrc ви можете додати

shopt -s histappend

Дякую, але це не впливає на проблему, яку я відчуваю. Я щойно перевірив і histappendпрацює, але в моїй історії все ще відображаються зміни попередніх команд.
Річард Вісман

Я шукав сторінку bash man і знайшов правила для редагування історії редагування назв команд Readline. Це досить описово, але я не бачу варіанту того, що ви хочете, за винятком, можливо: redraw-current-line Оновити поточний рядок.
Джефф Коулман

Також є варіант повернення-все-на-новій лінії, який за замовчуванням вимикається
Джефф Коулман,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.