Вернитесь к исходной команде, когда вы сделали несколько изменений в строке:
revert-line (M-r)
Undo all changes made to this line. This is like
executing the undo command enough times to get back to the beginning.
Mэто мета ключ, который altrдля меня.
Бесплатная, но полезная информация
Когда вы уже выполнены команда , как OP было сделаны ранее (это бывает), нет ничего , чтобы «отменить» , поскольку команды обрабатываются и запоминаются GNU Readline библиотеки и не написанные$HISTFILE до выходов оболочки. Причина , почему я говорю об этом, потому что вы не можете просто , как можно было бы ожидать , и это не может быть идеальным для выхода из оболочки.grep$HISTFILE
Итак, вот несколько вариантов, чтобы уберечь вас от прокрутки всех предыдущих команд readline.
Если вы помните какую-либо команду , нажмите ctrl+ rи введите то, что вы помните, чтобы найти предыдущие команды, содержащие эту строку. Повторное нажатие ctrl+ rпокажет следующий самый последний поиск в обратном направлении.
Например, введите ls -lзатем ctrl+ rстолько раз, сколько потребуется , чтобы найти предыдущую команду , которую вы ищете. Если вы прокрутите мимо него, ctrl+ sбудет искать вперед с текущей позиции.
fcБаш встроенной команды полезен для отображения номера индексов наряду с предыдущими командами чтения строки.
fc -l -100 перечислит предыдущие 100 команд в readline.
Кроме того, если OP знает, что он ищет предыдущую ls -lкоманду, он может передать вывод, grepнапример:fc -l -100 | grep 'ls -l'
Это должно вывести список предыдущих ls -lкоманд, которым предшествует порядковый номер. Вывод выглядит так:
2065 ls -l
Теперь вы можете использовать указатель события, !nгде указывается nномер индекса. В этом примере выполнение !2065будет расширено до ls -l.
Хотя это не помогает после этого, любой, кто хочет сохранить историю последних команд при изменении предыдущих команд, должен увидеть HISTORY EXPANSIONраздел man bash. Вот несколько альтернативных способов изменения старых команд без перезаписи истории.
В Event Designatorsразделе показано, как вы можете легко редактировать строку из последней использованной команды.
^string1^string2^
Quick substitution. Repeat the previous command, replacing string1 with string2. Equivalent to
``!!:s/string1/string2/'' (see Modifiers below).
Пример:
$ echo foo
foo
$ ^foo^bar
echo bar
bar
Самые последние команды теперь будут отображать:
echo foo
echo bar
Приведенный выше пример также объясняет, как использовать sedдля замены строки в указателе события.
!-n Refer to the current command minus n.
Так что если в истории есть 3 команды, echo fooто вы должны использовать:
!-3:s/foo/bar
Обратите внимание, что в этом случае указатели событий появятся в вашей истории как выполненная команда echo bar. Это не появится в истории как !-3:s/foo/bar.
Просто добавьте это, поскольку это кажется тесно связанным, даже если это больше «не делай», чем «отменить» решение, которое ищет OP.
ksh, например, вы можете редактировать записи истории и ссылаться на них , не удаляя «предыдущую версию» записи; у вас есть все вызванные команды доступны.