fc 命令

用途

处理命令历史列表。

语法

要打开编辑器以修改和重新执行先前输入的命令,请输入:

fc[-r] [-e 编辑器] [[] ] ]

要生成先前输入的命令的列表,请输入:

fc -l[-n ] [-r] [[] ] ]

要生成先前输入且带有执行时间的命令的列表,请输入:

fc -t[-n ] [-r] [第一个[最后一个] ]

要重新执行先前输入的命令,请输入:

fc -s [ = ] [ 第一 ]

描述

fc 命令显示了历史命令文件内容或调用一个编辑器去修改并重新执行以前在 shell 中输入的命令。

历史命令文件按编号列示命令。 列表中的第一个编号可以任意选择。 每一个命令与编号的关系不会更改,除非用户登录进系统并且没有其他进程访问过该列表。 在这种情况下,系统将重新设置编号,并将余下的最老的命令编号设置为 1。

如果命令历史记录文件中的数字达到的限制大于 HISTSIZE 环境变量的值或 32767 (以较大者为准) ,那么 shell 将回绕到 1。 尽管可以选择数字包装,但fc命令仍保持了命令的时间排序顺序。 例如,有三个命令按照编号 32766,32767 和 1(被折返)排序,那么编号 32767 的命令仍被认为在编号为 1 的命令之前。

可以使用 -l(L 的小写)标志列示历史文件中的命令。 当没有使用 -l 标志并且使用了 -e Editor 标志编辑命令,其结果行将输入到历史文件的末尾并且被 shell 重新执行(fc -e Editor 命令不会被输入进历史命令列表中)。 如果编辑器返回一个非零的退出状态值,这将禁止历史文件中的条目和命令重新执行。

fc 命令一起使用的命令行上的任何变量赋值或者重定向运算符将再一次调用前面的命令,并且抑制 fc 命令和前面的命令所产生的标准错误。 例如:

fc -s -- -1 2>/dev/null

标志

描述
-e 编辑 使用指定的编辑器编辑命令。 Editor 参数应是一个命令名称。 该命令用 PATH 环境变量指定位置。 当没有指定 -e 标志时,环境变量 FCEDIT 中的值被用作缺省值。 如果环境变量 FCEDIT 是空值或没有设置,那么使用 ed 编辑器。
-l (L 的小写)列示了历史文件中的命令。 不调用编辑器去修改它们。 按照 First Last 参数所指定的顺序写命令,就象 -r 标志所作用的,在每一个命令的前面有一个命令编号。
-n 当与 -l 标志一起使用时,隐藏命令编号。
-r 逆转所列示命令的顺序(当使用 -l 标志)或者逆转所编辑的命令顺序(当没有指定 -l 标志时)。
-s 不调用编辑器重新执行一个命令。 如果也没有指定 First 参数,那么 -s 标志重新执行前一个命令。
-t 在历史文件中列示命令及其执行时间。 工作过程与 -l 标志类似,但是还显示命令的执行时间。
注: 如果先前通过设置 EXTENDED_HISTORY=ON来记录时间字段,那么将显示格式化的时间字段,否则将显示 "?"。

参数

描述
第一个 最后一个 选择要列示或编辑的命令。 HISTSIZE 环境变量值确定了能够访问到的以前所输入命令的数量。 First 参数和 Last 参数必须具有以下数值中的一个:
[+]数量
表示一个特定的命令编号。 -l 标志可以显示命令编号。 缺省值为一个 +(加符号)字符。
-数量
表示一个以前执行的命令,由存储在历史列表中的命令编号指定。 例如,-1 指出了前一个刚执行过的命令。
String
指出了最近所输入的命令,该命令以指定的字符串开头。 如果指定了 Old= New 参数但没有指定 -s 标志,那么来自 First 参数的字符串中不能包含一个嵌入的 =(等于符号)。

当使用 -s 标志时,省略 First 参数将导致使用前一个命令。

当没有指定 -s 标志时,将应用以下规则:

  • When using the -l flag, omission of the 最后 parameter causes a default to the previous command.
  • When using the -r, -n, and -e flags, omission of the 最后 parameter causes a default to the 第一 parameter.
  • If both the 第一 and 最后 parameters are omitted, the previous 16 commands are listed or the previous single command is edited (depending on whether or not the -l flag is used).
  • If both the 第一 and 最后 parameters are present, all commands are listed (when the -l flag is specified ) or edited (when the -l flag is not specified). 通过将所有的命令同时显示在编辑器中,可以实现编辑多个命令,每个命令都另起一新行。 如果 First 参数表示的命令比 Last 参数表示的命令要更新的话,那么命令是以相反的顺序被列示或编辑的。 这与使用 -r 标志的效果是一样的。 例如,以下第一行的命令与第二行上相应的命令是等价的:
    fc  -r  10  20           fc      30  40
    fc      20  10           fc  -r  40  30
  • 使用一系列命令时,指定不在历史记录列表中的 第一个最后一个 值不是错误。 fc 命令会替换表示列表中合适的最早或最近的命令的值。 例如,如果在历史列表中仅有编号从 1 到 10 的十个命令,那么命令:
    fc  -l
    fc   1   99
    分别列示和编辑所有这十个命令。
描述
= 在要重新执行的命令中,用新字符串去代替第一个出现的老字符串。

环境变量

下列环境变量会影响fc命令的执行:

描述
扩展历史 用来控制历史文件中命令执行时间的记录。 如果变量设置为 ON,那么记录时间,否则不记录时间。
FCEDIT 当 shell 扩展该环境变量时,该变量确定了 -e editor 变量的缺省值。 如果环境变量 FCEDIT 为空值或没有被设置,那么缺省使用 ed 编辑器。
HISTDATEFMT 它用于控制 fc –t 命令显示的时间格式。 例如,如果是 "HISTDATEFMT=%Y ,那么fc-t将在执行命令时显示年份。 格式与 date 命令所做的相似。
HISTFILE 确定历史命令文件的路径名。 如果环境变量 HISTFILE 没有被设置,那么 shell 可能会尝试访问或创建在用户主目录中的 .sh_history 文件。
HISTSIZE 确定一个十进制数值,该数值表示了可以访问的以前输入的命令的数量限值。 如果没有设置该变量,那么使用缺省值 128。

退出状态

返回以下退出值:

描述
重大安全事件数量 成功完成列表。
> 0 发生错误。

否则退出状态是由 fc 命令执行的命令的状态。

示例

  1. 要在最近的命令上调用环境变量 "FCEDIT定义的编辑器(默认编辑器为 "/usr/bin/ed),请输入
    fc
    当完成编辑之后,执行该命令。
  2. To list the previous two commands that were executed, enter:
    fc -l -2
  3. 要查找以cc改变foobar显示并执行命令,输入
    fc -s foo=bar cc
  4. 要列示先前执行的命令及其执行时间,请输入:
    fc –t

文件

描述
/usr/bin/ksh 包含了 Korn Shell 程序的内置命令 fc
/usr/bin/fc 包含了 fc 命令。