Предположим, я хочу выполнить последовательность из четырех команд, которые я выполнял ранее. Если первый - 432 в истории команд, то я мог бы сделать:
$ !432; !433; !434; !435
Мне любопытно, есть ли более эффективный способ сделать это?
bash
command-line
command-history
Эрик Уилсон
источник
источник
history -p \!43{2..5}
напечатать команды 432 - 435 на терминал, пригодные для последующего копирования / вставки.Ответы:
Если это относится к командам, запущенным совсем недавно, более эффективный способ - ссылаться на них с отрицательными числами:
Кроме того, как только вы это сделаете, ваша последняя запись истории будет содержать всю цепочку команд, так что вы можете повторить это с
!!
.Изменить: Если вы еще не сделали, познакомьтесь с великолепной встроенной функцией
fc
, упомянутой Жилем . (Используйтеhelp fc
.) Оказывается, вы также можете использовать отрицательные числа с ним, так что вы могли бы сделать то же, что и выше, используяЭто имеет одно предостережение: после этого
eval
строка сохраняется в истории как последняя команда. Так что если вы запустите это снова, вы попадете в петлю!Более безопасный способ сделать это - использовать
fc
режим работы по умолчанию : пересылать выбранный диапазон команд в редактор и запускать их после выхода из него. Пытаться:Вы можете даже изменить порядок диапазона команд:
fc -1 -4
источник
Для просмотра ряда команд в истории используйте встроенную
fc
команду:Чтобы выполнить их снова:
источник
man fc
ничего мне не дает. Что означаетfc
? Какие еще есть варианты?help fc
... а такжеhelp help
.... help: help [-dms] [pattern ...] Отображение информации о встроенных командах.-l
флага он будет казнен без злаeval
.fc
«найти команду» или «исправить команду».Существует хороший и альтернативный способ последовательного запуска ряда команд из истории Bash:
вместо использования заменителя истории (
!432
или!-4
), вы можете искать в истории с помощью Ctrl+ r, и как только вы найдете первую команду, которую хотите запустить, нажать Ctrl+ o( оперировать и получить далее ) вместо returnклавиши.Это запустит команду и предложит следующую из истории. Вы можете нажать Ctrl+oстолько раз, сколько пожелаете, и завершить последовательность либо returnпоследней, либо Ctrl+cостановиться, не запуская ее.
источник
Ctrl-o
он просто выводит литерал^o
и ломает мой(reverse-i-search)
. Может быть, есть и другие настройки.Чтобы выполнить команды немедленно, а не редактировать их, вот синтаксически более тонкая версия ответа Джайлса с использованием eval :
Аргумент двоеточия для -e - это nash bash, который пропускает шаг «открыть в редакторе», который хочет fc. Кроме того, теперь (недавняя) история будет содержать фактические команды из истории, а не оператор eval.
источник
fc
для цикла иxsel
Это хорошо работает, когда я хочу объединить и повторно запустить последние n команд несколько раз:
Затем:
Или для больших команд, которые могут нуждаться в некотором редактировании:
источник