Есть ли способ получить команду из истории, не выполняя ее?
Может быть, я упускаю суть вопроса, так как сомневаюсь, что я единственный человек, который знает о :p
. Это означает «печать». Если вы печатаете !100:p
, оболочка напечатает (то есть отобразит) команду # 100 без ее выполнения.
Если вы не знаете об операторах :
в истории, вы должны изучить.
Как указывает «числовая иллюстрация» :n
извлекает n- е слово команды.
Вы также можете использовать :n-m
чтобы получить диапазон; и есть интересные значения по умолчанию.
Например,::-
(оставив пустыми n и m ), вы получите все слова, кроме последнего. :$
получает последнее слово. :h
это «голова», так что если вы печатаете
ls -ld /asdfg/qwerty/foo/bar
затем
!:- !$:h
превращается в
ls –ld /asdfg/qwerty/foo
Ах да !$
- это сокращение от !:$
. :s
является заменой, как в :s/old/new/
.
Это так же, как ^old^new^
за исключением таких вещей, как
:s
может использоваться для любой команды (как в !100:s/...
); ^^
работает только с самой последней командой.
:s
может использоваться для отдельных слов или диапазонов слов. Например,
!:- !$:s/d/D/
получает
ls -ld /asDfg/qwerty/foo/bar
(а не ls -lD ...
).
:s
может применяться глобально. Синтаксис не интуитивен, но, где :s/old/new/
заменяет первое вхождение, :gs/old/new/
заменяет каждое вхождение.
Кроме того, как только вы получили команду из истории, не выполнив ее (например, с помощью !100:p
), возможно, с изменениями (как показано выше), это станет самой последней командой в вашем списке истории.
Теперь вы можете нажать cursor (курсор вверх) и отредактировать его.