Баш: повторить последние N команд [дубликат]

Вопрос или проблема

В bash вы можете повторить последнюю команду, введя !!, или третью с конца команду !-3, например.

Есть ли быстрый способ повторить последние 3 команды, не вводя явно !-1; !-2; !-3?

fc -N -1

Где -N — это последние N команд, которые вы хотите повторить (поэтому fc -4 -1 использует последние четыре команды).

Это откроет редактор с последними N командами. Вы можете отредактировать команды по желанию, и когда закроете редактор, они все будут выполнены последовательно.

Более общо, fc -N -M извлечет команды от N-й до M-й, считая назад в истории команд.

Вы также можете подойти к этой проблеме с другой стороны и сгруппировать предыдущие 3 команды, например:

echo 1; echo 2; echo 3

и тогда вы можете просто использовать !!.

Ну, это не то, что вы ожидаете, но это работает:

history | fgrep -v history | tail -3 | sed 's_^ *__' | cut -f 2- | bash

И вы можете создать функцию для этого:

myFunc(){
    history | egrep -v 'history|myFunc' | tail ${1} | sed 's_^ *__' | cut -f 2- | bash
}

Тогда вы можете вызвать её так:

myFunc -3     

Ответ или решение

Вопрос об использовании Bash для повторения последних N команд из истории командной строки часто возникает среди пользователей UNIX-подобных систем. Оптимизация работы с командной строкой может значительно повысить эффективность и удобство работы. Давайте подробно разберемся, как различными способами можно автоматизировать выполнение нескольких последних команд.

Теория

Bash предоставляет мощные инструменты для работы с историей команд. Основные средства — это набор специальных символов и команд для получения доступа к предыдущим введённым командам без необходимости ручного поиска и копирования. Среди основных возможностей:

  1. !! – Повторяет последнюю команду.
  2. !-N – Повторяет N-ую команду с конца истории.
  3. history – Показ истории команд.

Однако если необходимо повторить несколько последних команд, существует несколько подходов, которые можно применить для выполнения этого действия более эффективно.

Примеры и подходы

Использование команды fc

Команда fc (fix command) является мощным инструментом для редактирования и повторения команд из истории. Синтаксис fc -N -M позволяет открыть последние N команд в текстовом редакторе для их редактирования и последующего выполнения. Пример:

fc -3 -1

Эта команда откроет последние три команды в редакторе (по умолчанию используется vim, но может быть настроен любой другой редактор через переменную окружения EDITOR). После закрытия редактора команды будут выполнены последовательно.

Группировка команд

Для часто повторяющихся последовательностей действий разумно объединить их в одну команду. Например:

echo 1; echo 2; echo 3

Теперь для повторного выполнения достаточно использовать всего лишь !!.

Использование history с фильтрацией

Можно воспользоваться встроенной историей команд, получив последние записи и передав их в оболочку для выполнения:

history | tail -n 3 | awk '{$1=""; print substr($0,2)}' | bash

Это решение выводит последние три команды, удаляет номер строки и выполняет их. Данная конструкция мощна, но требует внимательного использования, особенно в части фильтрации и отладки выводимых команд.

Создание функции

Для автоматизации повторных действий может быть разработана функция:

repeat_commands() {
    history | grep -v 'echo' | tail -n "$1" | awk '{$1=""; print substr($0,2)}' | bash
}

Таким образом, можно вызвать с параметром количество команд:

repeat_commands 3

Эта функция позволяет задавать количество повторяемых команд, что повышает гибкость в работе.

Применение

Применение вышеописанных подходов зависит от конкретных задач и удобства пользования. Например, для администраторов систем, часто выполняющих одинаковые последовательности команд при настройке серверов, группировка и использование функций могут существенно сократить время работы. В то время как более продвинутые пользователи могут воспользоваться fc для интерактивного редактирования и выполнения.

Также стоит отметить важность безопасности: выполнение команд непосредственно из истории требует предельно внимательного подхода, особенно если команды могут изменять системные настройки или содержат конфиденциальную информацию.

Заключение

Повторение последних N команд в Bash — задача, которая может быть решена множеством способов, каждый из которых имеет свои плюсы и минусы. В зависимости от сложности и частоты повторяющихся операций, пользователь может выбрать подходящий инструмент или разработать собственное решение. Bash предоставляет достаточные возможности для адаптации, что делает его универсальным инструментом как для повседневных задач, так и для сложных сценариев администрирования. Умение эффективно использовать историю команд — несомненно ценное умение, способное значительно повысить продуктивность работы в командной строке.

Оцените материал
Добавить комментарий

Капча загружается...