fc
це команда, вбудована в оболонку bash, створена для редагування та повторного виконання команд історії.
Він також присутній на CygWin, і він працює на всіх дистрибутивах Linux, на яких я тестував:
fc -s '\'='/' -1
Деякі пояснення
Ще кілька слів про те, чому ви отримуєте "заміну не вдалося"
Здається, що для s
модифікатора ще (поки) не реалізована підміна символу зворотної косої риси \
, тобто вихідного. Щоб бути впевненим, нам слід побачити код, наприклад, gnu-версії розширення історії bash (але була вищевказана команда, щоб отримати те, що ви намагалися зробити ... тому я вважаю ледачим ....).
Деякі примітки:
Ми думаємо, що він буде працювати з кожним RegEx, з яким ми знаходимо роботу sed
, але це не гарантується. Зворотна косою рисою є характер втечі розширення, і проблема тут. Більше того, поведінка розширення пов'язана з shopt
параметрами, тому нам слід почати розглядати кожен випадок ...
Коли ви вставите рядок cd C:\Foo\Bar
у свою команду bash, вона буде розширена, і для інтерпретатора вона з'явиться як cd C:FooBar
; у такому вигляді він також буде зберігатися у $_
внутрішній змінній.
Якщо ви замість цього вставили cd "C:\Foo\Bar"
або cd 'C:\Foo\Bar'
в $_
змінну, вам слід знайти C:\Foo\Bar
.
Оскільки розширення історії виконується одразу після зчитування повного рядка, перед тим, як оболонка розбиває його на слова, ви можете спокусити почати використовувати його з деяким більш-менш простим башизмом , наприклад, з деяким походженням від (можливо, додавання :p
або :q
, ""
, розбір і так далі ...)
!!:0 ${_//\\/\/}
На цей момент потрібно пам’ятати, що починати грати з контуром і іменами файлів не безпечно , особливо якщо вони надходять із буфера обміну Windows (прочитайте загалом сторінку Чому б не розібратися ls
?) , Це, по суті, пов'язане з можливістю використання вкладки, пробіли та нові рядки як правильні символи для імен файлів та каталогів ...).
Крім того, коли ви вставляєте текст, захоплений мишею , ви можете також вставити провідний пробіл. Це може уникнути того, що ваша команда закінчиться в історії (це залежить від параметрів оболонки ...). Якщо так, ваша наступна !!
команда буде контрольованою командою ... (див. Приклад в іншій відповіді ).Це зайвий відчутний ризик .
Висновок
Розширення історії вводять слова зі списку історії у вхідний потік, полегшуючи повторення команд, вставляти аргументи попередньої команди в поточний рядок введення або швидко виправляти помилки в попередніх командах.
Якщо це непросто, я починаю думати, що ми робимо щось не так ;-)
Рекламна нудота: невеликий експеримент
Я ввімкнув histverify
оболонку тоді ...
shopt -s histverify
echo C:\Foo\Bar
!!:s|C|D| {1,2}A
потім натискаю Enterі як перевірене розширення знаходжу
echo D:\Foo\Bar {1,2}A
потім я Enterзнову натискаю, і це лунає
D:FooBar 1A 2A
Це, мабуть, вказує на те, що substitution failed
генерується в розширенні історії, обробленому до розширення Brace , тому, перш за все , це, здається, підтверджує, що s
модифікатор історії не (ще) не обробляв заміну \
символу як справжній регулярний вираз. ..
cd 'C:\foo\bar'