带有初学者示例的 fc 命令教程

fc 命令,简称 FCommands 是一个 shell 内置命令,用于在交互式 shell 中列出、编辑和重新执行最近输入的命令。 您可以在您喜欢的编辑器中编辑最近输入的命令并运行它们,而无需重新键入整个命令。 该命令有助于纠正之前输入的命令中的拼写错误,避免重复冗长复杂的命令。 由于它是 shell 内置的,它在大多数 shell 中都可用,包括 Bash、Zsh、Ksh 等。在这个简短的教程中,我们将学习在 Linux 中使用 fc 命令。

使用 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

列出特定范围内的命令,对于 example 520525, 做:

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

除了使用行号,我们还可以使用字符串。 为了 example列出从 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

看到之间的一切 pwdmore 命令,你可以使用:

$ fc -l p m

或者,使用起始命令命令的首字母和结束命令的行号的组合:

$ fc -l p 528

或者,只是开始和结束命令的行号:

$ fc -l 521 528

所有这三个命令都将显示相同的结果。

自动编辑并重新运行最后一个命令

有时,您可能拼错了先前的命令。 在这种情况下,您可以使用默认编辑器轻松编辑命令的拼写错误并执行它,而无需再次重新键入。

要编辑最后一个命令并重新运行它,请执行以下操作:

$ fc

这将在默认编辑器中打开您的最后一个命令。

使用 fc 命令编辑并重新运行最后一个命令

正如您在上面的屏幕截图中看到的,我的最后一个命令是 "fc -l". 现在,您可以对命令进行任何更改,并在保存并退出编辑器后再次自动重新运行它。 当您使用长而复杂的命令或参数时,这可能很有用。

重要的提示: 请注意,这也可以是 破坏性的. 为了 example,如果上一个命令是致命的命令,例如 "rm -fr <some-path>",它会自动执行,您可能会丢失您的重要数据。 因此,您在使用时必须非常小心 fc 命令。

更改默认编辑器以编辑命令

fc 的另一个值得注意的选项是 "e" 用于选择不同的编辑器来编辑命令。 为了 example, 我们可以用 "nano" 编辑器来编辑最后一个命令,如下所示。

$ fc -e nano

此命令将打开 nano 编辑器(而不是默认编辑器)来编辑最后一个命令。

更改 fc 命令的默认编辑器

您可能会发现使用起来很耗时 -e 每个命令的选项。 要将新编辑器设为默认编辑器,只需设置环境变量 FCEDIT 到你想要的编辑器的名字 fc 使用。

为了 example要将“nano”设置为新的默认编辑器,请编辑您的 ~/.profile 或环境文件:

$ vi ~/.profile

添加以下行:

FCEDIT=nano

您还可以使用编辑器的完整路径,如下所示。

FCEDIT=/usr/local/bin/emacs

类型 :wq 保存和 close 文件。 要更新更改,请运行:

$ source ~/.profile

现在,您只需键入“fc”即可编辑最后一个命令 "nano" 编辑。

重新运行最后一个命令而不编辑它

我们已经知道,如果我们不带任何参数运行“fc”,它会使用最新的命令加载编辑器。 有时,您可能不想编辑,而只是执行最后一个命令。 为此,请使用连字符 (-) 符号在末尾,如下所示。

$ echo "Welcome to OSTechNix"
Welcome to OSTechNix

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

如您所见,即使我使用了 fc 也没有编辑最后一个命令(即 echo “Welcome to OSTechNix”) -e 选项。

请注意,某些选项是特定于 shell 的。 它们可能无法在其他 shell 中工作。 为了 example 以下选项可用于 zsh 贝壳。 它们不能在 Bash 或 Ksh shell 中工作。

显示命令执行的时间

要查看命令的运行时间,请使用 -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

TL;博士

  • 当不带任何参数运行时,fc 将在默认文本编辑器中加载最新的命令。
  • 当使用数字参数运行时,fc 会使用具有该指定数字的命令加载编辑器。
  • 当使用字符串参数运行时,fc 会加载以该指定字符串开头的最新命令。
  • 当使用 fc 的两个参数运行时,参数指定一系列命令的开始和结束。

笔记: 在最近的 BASH 版本中不推荐使用某些选项。

有关更多详细信息,请参阅手册页。

$ man fc

相关阅读:

  • 在 Linux 中重复上一个命令的不同方法
  • 如何在 Linux 中从 Bash 历史记录中清除特定命令
  • 如何在 Linux 中清除命令行历史记录