Чи є можливість скасувати зміну історії башти?


9

Натискаючи вгору, я можу пройти раніше введені команди. Я помітив, що якщо я модифікую одну з них, це змінює історію. Наприклад, якщо я набираю:

echo a
echo b
echo c
[up][up][backspace]d[ctrl+c]

тепер історія показує, що другою командою було echo d, ні echo b. Як я зберігаю перше echo bв історії?

Наприклад, скажіть, що я виконую дійсно довгу команду з великою кількістю варіантів. тоді я хочу запустити його знову, з незначною зміною, тому я повертаюсь назад через історію, щоб знайти її, внести зміни, але потім зрозумію, що насправді мені не потрібно її повторно запускати, тільки продумавши інший варіант робити замість цього. потім пізніше я хочу повернутися назад і нагадати собі, якою командою я керував - але зачекайте, історія тепер показує неправильну річ!

Це трапляється дуже рідко, але коли це відбувається, я вважаю, що це дуже дратує. Чи є якийсь спосіб автоматичного збереження початкової історії?


1
з historyви можете побачити всі команди. Після ви можете вибрати те, що вам потрібно. Яку оболонку ви зараз використовуєте?
Хастур

6
Я не можу цього відтворити. Якщо я зміню c на d, натисніть CTRL + C і знову натисніть [вгору], він все одно буде говорити echo c.
Мартін фон Віттіч

Відповіді:


6

Спробуйте вкласти своє ~/.inputrc

 set revert-all-at-newline on

У деяких випадках ви можете знайти його за замовчуванням (Вимкнено).
Це повинно змусити readlineскасувати всі зміни в рядках історії перед поверненням після accept-lineйого виконання. (більше інформації в man bash).

Edit:
CTRL+c і set revert-all-at-newline onпрацює відмінно , так як bash-4.3.30.

# GNU bash, version 4.3.30(1)-release
# Emacs-mode

echo c
[up][backspace]d[Ctrl+c][up] # you should see echo c

Але:

echo c
[up][backspace]d[down][Ctrl+r]echo[Ctrl+j][Ctrl+c][up] # you should see echo d

Приємно, це краще рішення. Цікаво, що CTRL-c насправді змусить запам'ятати змінене значення, хоча повне видалення рядка або стрілка вниз, а потім натискання клавіші Enter або виконання іншої команди відновить історію.
Дін Сереневий

@DeanSerenevy: Спасибі, мені теж подобається ваш спосіб вирішення, і я теж починаю використовувати CTRL-a nano:-)
Hastur

4

Зазвичай:

CTRL-a # ENTER

зробимо це.

Оригінальна команда запам'ятається, якщо ви виконаєте модифіковану команду. Звичайно, ви не хочете насправді виконувати, тому можете прокоментувати рядок із #.

У вашому прикладі, ви б тоді в історії: echo a, echo b, echo c, # echo d.


1
Ви можете натиснути, alt-shift-3щоб прокоментувати поточний командний рядок, якщо ваш bash використовується readline. /insert-commentв man 3 readline(або man bash) для отримання додаткової інформації.
cychoi
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.