Команда Bash fc: Легкое владение оболочкой Bash, как профессионал

Вы когда-нибудь выполняли команду в Bash и получали ошибку из-за опечатки? Или, возможно, вы забыли последние три выполненные команды? Вместо их переписывания или запоминания предыдущих команд, команда fc в Bash может помочь быстро редактировать и повторно выполнять предыдущие команды.

В этой статье вы узнаете, как использовать fc для редактирования и повторного выполнения команд из истории команд. После прочтения этого руководства вы будете владеть fc как настоящий воин командной строки!

Предварительные требования

Эта статья будет руководством. Если вы планируете следовать пошагово, вам понадобится компьютер с Linux или компьютер под управлением Windows 10 с включенной Windows Subsystem for Linux (WSL). В этом руководстве будет использоваться Ubuntu 20.04 LTS.

О команде fc в Bash

fc – это не приложение для Linux, а встроенная утилита оболочки в Bash. Bash доступен в большинстве основных дистрибутивов Linux. С помощью нескольких нажатий клавиш команда fc в Bash позволяет вам просматривать, редактировать или выполнять предыдущие команды.

Команда fc также доступна в оболочке Z Shell (ZSH).

Вы запустили длинную команду, которая оказалась неверной? Команда fc позволит вам избежать повторного набора всей команды. Вместо этого fc позволяет вам редактировать команду с использованием текстового редактора вашего выбора. После сохранения ваших изменений отредактированная команда(ы) будет автоматически выполнена!

Готовы попробовать fc? Давайте погрузимся!

Отображение предыдущих команд

Вы ушли от своего компьютера, вернулись и забыли, какую команду вы последний раз запускали? Или может быть, вы не помните, выполнили ли вы несколько команд в правильной последовательности. Что делать? Расслабьтесь, команда fc поможет вам вспомнить. Вот как.

1. Откройте терминал Bash на вашем компьютере.

2. Чтобы команда fc была полезной, у нее должна быть какая-то история команд, с которой она будет работать. Поскольку вы только что открыли новое окно терминала, история команд может еще не сформирована. Чтобы сформировать историю команд для тестирования, скопируйте каждую команду ниже и выполните ее в вашем терминале. Эти команды не вызовут неприятностей, и вы не поставите свой компьютер в опасность.

# Очистить экран
 clear
 
# Вывести строку в сеанс терминала
 echo 'working on the command line with fc'
 
# Показать некоторую информацию о системе
 uname -a
 
# Использовать команду PS для получения информации о процессе
 ps aux

3. Затем перечислите все команды в истории, запустив следующую команду. Опция -l указывает fc только перечислить все предыдущие команды, не выполняя их.

fc -l

Как видно ниже, команда fc отобразила все четыре команды, которые вы ранее выполнили. Цифры слева указывают порядок выполнения каждой команды.

Listing command history with fc

Редактирование и повторное выполнение последней команды

Представьте ситуацию, когда вы устанавливаете приложение, и сделали опечатку. В результате команда завершается неудачно. Вместо того, чтобы заново набирать всю команду, почему бы не отредактировать команду и автоматически повторно выполнить ее? Чтобы сделать это, следуйте этим шагам.

1. Симулируйте установку несуществующего приложения, запустив следующую команду в терминале. Обратите внимание, что вы намеренно допустите опечатку в названии приложения caffiene.

sudo apt install caffiene -y

В результате попытка установки завершится неудачно. Вы получите сообщение, аналогичное показанному ниже.

Failed installation message

2. Чтобы исправить последнюю выполненную команду, выполните следующую команду в терминале. Это откроет буфер истории команд в текстовом редакторе по умолчанию. В этом примере текстовым редактором по умолчанию является nano.

fc

На снимке экрана ниже показана последняя команда в редакторе nano.

Editing the last command with nano.

Если nano не является вашим предпочтительным текстовым редактором, вы можете указать fc использовать другой редактор, например, vi. Для этого добавьте опцию -e, за которой следует имя текстового редактора. Например, fc -e vi откроет историю команд в текстовом редакторе vi.

3. Как только вы окажетесь в текстовом редакторе nano, исправьте опечатку в названии приложения с caffiene на caffeine.

4. После исправления названия приложения нажмите CTRL+X, чтобы выйти из nano.

5. При следующем запросе о сохранении изменений Save modified buffer?, нажмите Y —> Enter, чтобы сохранить изменения.

Editing the last command and saving changes to the history buffer

Сразу после выхода из текстового редактора, fc автоматически выполнит отредактированную вами команду.

Automatically re-executing the edited command

Редактирование и повторное выполнение предыдущей команды

С помощью fc вы можете редактировать не только последнюю выполненную вами команду, но и любую из предыдущих. Например, чтобы отредактировать команду echo 'working on the command line with fc', выполните следующие шаги.

1. Выведите список предыдущих команд в терминале, запустив следующую команду.

fc -l

2. Найдите команду, которую хотите отредактировать, в списке истории команд, и запомните число слева от нее. В этом примере номер команды – 2.

Listing the command history and finding the command number to edit

3. Чтобы отредактировать команду с номером 2, выполните следующую команду в терминале. Команда откроется в текстовом редакторе для редактирования.

fc 2

4. После того как вы окажетесь в текстовом редакторе, измените команду по необходимости.

5. После редактирования команды нажмите CTRL+X для выхода из нано.

6. На следующем запросе о том, нужно ли сохранить изменения, нажмите Y —> Enter.

Editing a past command entry in the history buffer

После сохранения команды и выхода из текстового редактора отредактированная команда автоматически выполняется в оболочке.

Редактирование и повторное выполнение нескольких команд

Если вы думаете, что fc может редактировать и выполнять только одну предыдущую команду за раз, то вас ждет приятное удивление. Почему? fc также позволяет редактировать несколько предыдущих команд! В чем польза редактирования нескольких предыдущих команд? Во-первых, вы можете изменить порядок выполнения команд.

Предположим, вы хотите отредактировать предыдущие команды с 2 по 7. Для этого выполните следующие действия.

1. Выполните следующую команду в вашем терминале Bash и нажмите Enter. Эта команда читается как fc <space> 2 <space> 7, что означает, что fc откроет команды с 2 по 7 для редактирования.

fc 2 7

2. Затем отредактируйте команды по необходимости. Например:

  • Удалите команду sudo apt install caffiene -y.
  • Поменяйте местами команды uname -a и ps aux.
  • Удалите clear.
Editing command history entries 2 through 7 at once

3. После редактирования команд нажмите CTRL+X для выхода из нано.

4. На следующем запросе о том, нужно ли сохранить изменения, нажмите Y —> Enter.

Команды, которые вы изменили, будут выполнены автоматически после выхода из текстового редактора.

Automatically re-executing the edited command

Повторное выполнение предыдущей команды без редактирования

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

  1. Выведите предыдущую команду в терминале, запустив следующую команду.
fc -l

2. Из списка истории команд найдите команду, которую хотите выполнить снова, и запишите число слева от нее. В этом примере номер команды – 2.

Listing the command history and finding the command number to execute

3. Чтобы выполнить конкретную предыдущую команду, запустите следующую команду в оболочке. Опция -s указывает fc пропустить редактирование и продолжить выполнение команды номер 2.

fc -s 2

На скриншоте ниже показано, как fc выполняет команду номер 2 из истории команд.

Executing a previous command from the history buffer without editing

Заключение

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

С знаниями, которые вы теперь имеете о fc, думаете ли вы использовать его? Или все же предпочтете повторно вводить команды в оболочке? Сделайте мудрый выбор!

Source:
https://adamtheautomator.com/bash-fc-command/