Поиск по сайту:

Учебное пособие по команде fc с примерами

Отображение или выполнение команд из списка истории с помощью команды fc в Linux

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

Команда fc может помочь исправить орфографические ошибки в ранее введенных командах и избежать повторения длинных и сложных команд. Поскольку она встроена в оболочку, она доступна в большинстве оболочек, включая Bash, Zsh, Ksh и т. д. В этом кратком руководстве мы научимся использовать команду fc в Linux.

Получение списка недавно выполненных команд с помощью команды fc

Если вы запустите команду fc -l без аргументов, она отобразит последние 16 команд.

$ fc -l
507 fish
508 fc -l
509 sudo netctl restart wlp9s0sktab
510 ls -l
511 pwd
512 uname -r
513 uname -ms
514 touch ostechnix.txt
515 vi ostechnix.txt
516 echo "Welcome to OSTechNix"
517 sudo apcman -Syu
518 sudo pacman -Syu
519 more ostechnix.txt 
520 wc -l ostechnix.txt 
521 cat ostechnix.txt 
522 clear

Список последних команд в обратном порядке

Чтобы изменить порядок команд (самые новые команды указаны первыми), используйте флаг -r.

fc -r

Список последних команд без номеров строк

Как вы могли заметить, все ранее выполненные команды отображаются с префиксными номерами. Вы можете подавить номера строк, используя флаг -n.

$ fc -ln
 nano ~/.profile
 source ~/.profile
 source ~/.profile
 fc -ln
 fc -l
 sudo netctl restart wlp9s0sktab
 ls -l
 pwd
 uname -r
 uname -ms
 echo "Welcome to OSTechNix"
 sudo apcman -Syu
 cat ostechnix.txt 
 wc -l ostechnix.txt 
 more ostechnix.txt 
 clear

Теперь вы не увидите номера строк.

Отобразить результат, начиная с определенной команды

Чтобы вывести результат, начиная с определенной команды, просто используйте номер строки вместе с опцией -l. Например, чтобы отобразить команды, начиная с номера строки 520 до настоящего времени, мы делаем:

$ fc -l 520
520 ls -l
521 pwd
522 uname -r
523 uname -ms
524 echo "Welcome to OSTechNix"
525 sudo apcman -Syu
526 cat ostechnix.txt 
527 wc -l ostechnix.txt 
528 more ostechnix.txt 
529 clear
530 fc -ln
531 fc -l

Вместо использования номеров строк мы также можем использовать строки. Например, перечислите команды, начиная с команды pwd и заканчивая последней, просто используйте начальную букву этой команды (т. е. p), как показано ниже.

$ fc -l p
521 pwd
522 uname -r
523 uname -ms
524 echo "Welcome to OSTechNix"
525 sudo apcman -Syu
526 cat ostechnix.txt 
527 wc -l ostechnix.txt 
528 more ostechnix.txt 
529 clear
530 fc -ln
531 fc -l
532 fc -l 520
533 fc -l 520 525
534 fc -l 520
535 fc -l 522
536 fc -l l

Список последних команд в определенном диапазоне

Чтобы вывести список команд в определенном диапазоне, например от 520 до 525, выполните:

$ fc -l 520 525
520 ls -l
521 pwd
522 uname -r
523 uname -ms
524 echo "Welcome to OSTechNix"
525 sudo apcman -Syu

Список команд между определенным диапазоном

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

fc -l p m

Или используйте комбинацию первой буквы начальной команды и номера строки конечной команды:

fc -l p 528

Или просто номера строк начальной и конечной команд:

fc -l 521 528

Все эти три команды отобразят один и тот же результат.

Автоматическое редактирование и повторный запуск последней команды

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

Чтобы отредактировать последнюю команду и повторно запустить ее, выполните:

fc

Это откроет вашу последнюю команду в редакторе по умолчанию.

Отредактируйте и повторно запустите последнюю команду с помощью команды fc.

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

Важное примечание: Помните, что это также может быть разрушительным . Например, если предыдущая команда была смертельно опасной, например "rm -fr ", она выполнится автоматически, и вы можете потерять важные данные. Итак, вы ДОЛЖНЫ быть очень осторожны при использовании команды fc.

Измените редактор по умолчанию для редактирования команд

Еще одна примечательная опция fc — "e", которая используется для выбора другого редактора для редактирования команд. Например, мы можем использовать редактор "nano" для редактирования последней команды, как показано ниже.

fc -e nano

Эта команда откроет редактор nano (вместо редактора по умолчанию) для редактирования последней команды.

Измените редактор по умолчанию для команды fc

Установить редактор по умолчанию для команды fc

Использование опции -e для каждой команды может занять много времени. Чтобы сделать новый редактор редактором по умолчанию, просто задайте для переменной среды FCEDIT имя редактора, который вы хотите использовать fc.

Например, чтобы установить "nano" в качестве нового редактора по умолчанию, отредактируйте свой ~/.profile или файл среды:

vi ~/.profile

Добавьте следующую строку:

FCEDIT=nano

Вы также можете использовать полный путь к редактору, как показано ниже.

FCEDIT=/usr/local/bin/emacs

Введите :wq, чтобы сохранить и закрыть файл. Чтобы обновить изменения, запустите:

source ~/.profile

С этого момента просто введите «fc», чтобы отредактировать последнюю команду с помощью редактора «nano».

Повторно запустите последнюю команду без ее редактирования.

Мы уже знали, что если мы запустим «fc» без каких-либо аргументов, он загрузит в редактор по умолчанию самую последнюю команду. Иногда вам может потребоваться не редактировать, а просто выполнить последнюю команду.

Для этого используйте символ дефиса (-) в конце, как показано ниже.

$ echo "Welcome to OSTechNix"
Welcome to OSTechNix

$ fc -e -
echo "Welcome to OSTechNix"
Welcome to OSTechNix

Как видите, fc не редактировал последнюю команду (то есть эхо «Добро пожаловать в OSTechNix»), даже если я использовал опцию -e.

Обратите внимание, что некоторые параметры зависят от оболочки. Они могут не работать в других оболочках. Например, в оболочке zsh можно использовать следующие параметры. Они не будут работать в оболочках Bash или Ksh.

Отображение времени выполнения команд

Чтобы узнать, когда были выполнены команды, используйте -d, как показано ниже.

fc -ld
1 18:41 exit
2 18:41 clear
3 18:42 fc -l
4 18:42 sudo netctl restart wlp9s0sktab
5 18:42 ls -l
6 18:42 pwd
7 18:42 uname -r
8 18:43 uname -ms
9 18:43 cat ostechnix.txt
10 18:43 echo "Welcome to OSTechNix"
11 18:43 more ostechnix.txt
12 18:43 wc -l ostechnix.txt
13 18:43 cat ostechnix.txt
14 18:43 clear
15 18:43 fc -l

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

Мы также можем отобразить полную временную метку каждой команды, используя опцию -f.

 fc -lf
 1 4/5/2018 18:41 exit
 2 4/5/2018 18:41 clear
 3 4/5/2018 18:42 fc -l
 4 4/5/2018 18:42 sudo netctl restart wlp9s0sktab
 5 4/5/2018 18:42 ls -l
 6 4/5/2018 18:42 pwd
 7 4/5/2018 18:42 uname -r
 8 4/5/2018 18:43 uname -ms
 9 4/5/2018 18:43 cat ostechnix.txt
 10 4/5/2018 18:43 echo "Welcome to OSTechNix"
 11 4/5/2018 18:43 more ostechnix.txt
 12 4/5/2018 18:43 wc -l ostechnix.txt
 13 4/5/2018 18:43 cat ostechnix.txt
 14 4/5/2018 18:43 clear
 15 4/5/2018 18:43 fc -l
 16 4/5/2018 18:43 fc -ld

Конечно, европейцы могут использовать европейский формат даты, используя опцию -E.

 fc -lE
 2 5.4.2018 18:41 clear
 3 5.4.2018 18:42 fc -l
 4 5.4.2018 18:42 sudo netctl restart wlp9s0sktab
 5 5.4.2018 18:42 ls -l
 6 5.4.2018 18:42 pwd
 7 5.4.2018 18:42 uname -r
 8 5.4.2018 18:43 uname -ms
 9 5.4.2018 18:43 cat ostechnix.txt
 10 5.4.2018 18:43 echo "Welcome to OSTechNix"
 11 5.4.2018 18:43 more ostechnix.txt
 12 5.4.2018 18:43 wc -l ostechnix.txt
 13 5.4.2018 18:43 cat ostechnix.txt
 14 5.4.2018 18:43 clear
 15 5.4.2018 18:43 fc -l
 16 5.4.2018 18:43 fc -ld
 17 5.4.2018 18:49 fc -lf

Краткое содержание

Позвольте мне суммировать важные ключевые моменты.

  • При запуске без каких-либо аргументов fc загрузит самую последнюю команду в текстовом редакторе по умолчанию.
  • При работе с числовым аргументом fc загружает в редактор команду с указанным номером.
  • При работе со строковым аргументом fc загружает самую последнюю команду, начинающуюся с указанной строки.
  • При запуске с двумя аргументами fc аргументы указывают начало и конец диапазона команд.

Примечание. Некоторые параметры в последних версиях BASH устарели.

Получать помощь

Более подробную информацию можно найти на странице руководства команды fc.

man fc

В некоторых дистрибутивах страница руководства для команды fc недоступна. В таких случаях вы можете ввести команду fc --help, чтобы отобразить раздел справки.

fc --help
fc: fc [-e ename] [-lnr] [first] [last] or fc -s [pat=rep] [command]
    Display or execute commands from the history list.
    
    fc is used to list or edit and re-execute commands from the history list.
    FIRST and LAST can be numbers specifying the range, or FIRST can be a
    string, which means the most recent command beginning with that
    string.
    
    Options:
      -e ENAME	select which editor to use.  Default is FCEDIT, then EDITOR,
    		then vi
      -l 	list lines instead of editing
      -n	omit line numbers when listing
      -r	reverse the order of the lines (newest listed first)
    
    With the `fc -s [pat=rep ...] [command]' format, COMMAND is
    re-executed after the substitution OLD=NEW is performed.
    
    A useful alias to use with this is r='fc -s', so that typing `r cc'
    runs the last command beginning with `cc' and typing `r' re-executes
    the last command.
    
    Exit Status:
    Returns success or status of executed command; non-zero if an error occurs.

Надеюсь это поможет.

Связанное чтение:

  • Различные способы повторить последнюю команду в Linux
  • Как удалить определенную команду из истории Bash в Linux
  • Как очистить историю командной строки в Linux

Статьи по данной тематике