Як зупинити редагування історії 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.