Чтобы запросить, чтобы команда была напечатана, а не выполнена после подстановки истории, добавьте :p
модификатор , например !42:p
. Полученная команда также будет занесена в историю, так что вы можете нажать, Upчтобы отредактировать ее.
Если у вас есть histverify
опция set ( shopt -s histverify
), у вас всегда будет возможность редактировать результат подстановок истории.
fc
Встроенный дает ограниченный доступ к раскрыванию истории (без слов десигнатор), а также позволяет редактировать предыдущую команду во внешнем редакторе.
Вы можете использовать !prefix
для ссылки на последнюю команду, начинающуюся с prefix
, и !?substring
для ссылки на последнюю команду, начинающуюся с substring
. Когда вы знаете, что ищете, это может сэкономить много времени history | less
.
Другой способ поиска по предыдущей истории - это пошаговый поиск: нажмите Ctrl+ Rи начните вводить подстроку того, что вы ищете. Нажмите Ctrl+, Rчтобы перейти к предыдущему вхождению строки поиска, и Ctrl+, Sесли вы зашли слишком далеко. Большинство кроме клавиш Ctrl+ R, Ctrl+ S, Backspaceи обычные символы прекратить инкрементный поиск и имеют обычный эффект (например , клавиши со стрелками , чтобы переместить курсор в строке вы достигли, Enterчтобы выполнить команду).
Жиль "ТАК - перестань быть злым"
источник
stty -ixon
до того, как Ctrl-s сработает.Ctrl-s
важна, иначе я застряну, как я .Еще один маленький: Alt+#
закомментирует текущую строку и переместит ее в буфер истории.
Поэтому, когда вы собираете командную строку и вам нужно ввести временную команду, например, чтобы найти файл, вы просто нажимаете Alt+ #, вводите другую команду, заходите в историю, раскомментируете и продолжаете.
источник
Esc
,#
работаетВы можете использовать магическое пространство, чтобы расширить историю, прежде чем нажать Enter. В вашем .inputrc отобразите пространство на магическое пространство:
Теперь, когда вы вводите пробел после спецификации истории, он сразу же расширяется - удобно, если вы тоже хотите его редактировать!
источник
Посмотрите на
history-expand-line
команду, связанную сAlt+^
по умолчанию. Это расширит строку на месте, которую вы затем сможете редактировать.источник
Используя
Ctrl+r
вы можете искать историю:Любая найденная вами команда может быть отредактирована ...
Я думаю, что я нашел именно то, что вам нужно: запустить
shopt -s histverify
и в следующий раз, когда вы хотите использовать!n
команду, не будет выполнена, а только положить в командную строку ...источник
!n:p
сработает?Я часто хотел этого. Когда я использовал csh (и tcsh), у меня была идиома:
!:88*:p
Эта идиома вставляет «слово 88 через последнее слово» предыдущей команды в точку, где вы набираете текущую командную строку, что обычно является концом. В csh это не ошибка для такого выражения, чтобы не создавать слов. То есть не должно быть ни слова 88, ни следующего за ним. Если нет слова 88, это не добавляет слов в конец набираемой команды, а затем помещает полученную командную строку в историю без выполнения.
Как вы, наверное, знаете,
*! (как !! и! -1) - предыдущая команда;
*: 88 - это слово 88 (первое слово - обычно это команда - ноль), и csh потребует, чтобы такое слово существовало, но ...
*: 88 * - это все слова, начинающиеся со слова 88, а затем csh делает не требовать слово для существования;
*: p означает печать, но не выполняет командную строку.
С или без: p, командная строка добавляется в историю команд.
"Почему 88?" Вы задаетесь вопросом? Потому что это тот же ключ, что и * мне понадобится. Если у вас есть такие длинные команды, возможно!: 888 *: p - это то, что вам нужно. Извините, это не работает с bash AFAIK. Баш просто скажет
bash: :88*: bad word specifier
Интересный факт: ваша команда обычно не должна быть первой.
> /tmp/foo echo My command is word 3
действует в bash и csh.
источник
Я обычно использую Ctrl+ rдля поиска и затем Ctrl+ eдля перехода в конец строки без выполнения.
источник