Есть ли способ получить команду из истории, не выполняя ее?
Может быть, я упускаю суть вопроса, так как сомневаюсь, что я единственный человек, который знает о :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 (курсор вверх) и отредактировать его.