AI智能
改变未来

shell中history和fc内建命令的用法说明

内置命令:内置命令history用于显示已经键入的命令历史,命令前有event
number(事件号).

history# 693  echo $HISTCMD# 694  history# 695  HISTCONTROL=ignoreboth# 696  echo \"hello world\"# 697  history# 698  echo $HISTCONTROL# 699  exit# 700  echo $HISTCONTROL# 701  exit# 702  history

fc命令 fc命令也成为fix命令,有两种用法:

  1. 从历史列表中选择命令
  2. 在vi或emacs或系统其它的编辑器中编辑命令
    第一种用法:带-l选项的fc命令可从历史列表中选择指定的命令行或某个范围的命令行。如果打开-l开关,结果将输出到屏幕。如fc
    -l,默认情况下将显示历史列表中的最后16行,fc -l
    10则显示在从10开始的所有命令行,fc -l
    -3选择最后3行。-n开关可用于关闭历史列表中序号功能。如果打开了该开关,你就可以选择某个范围的命令行并把它们重新定向到文件中,该文件可作为一个脚本被执行。-r开关用于反转命令的顺序。
    第二种用法在后面的\”命令行编辑\”中进行描述。

fc命令

fc参数 含义
-e editor 将历史列表调入编辑器
-l n-m 列出从n~m范围的命令
-n 关闭历史列表的序号功能
-r 反转命令的顺序
-s string 访问以string开头的命令
fc -l#692	 history#693	 echo $HISTCMD#694	 history#695	 HISTCONTROL=ignoreboth#696	 echo \"hello world\"#697	 history#698	 echo $HISTCONTROL#699	 exit#700	 echo $HISTCONTROL#701	 exit#702	 history#703	 fc -l#704	 fc -l |wc -l#705	 fc -l 10#706	 hash#707	 fc -l -3fc -l -3#705	 fc -l 10#706	 hash#707	 fc -l -3fc -ln #序号被关闭#	 echo $HISTCMD#	 history#	 HISTCONTROL=ignoreboth#	 echo \"hello world\"#	 history#	 echo $HISTCONTROL#	 exit#	 echo $HISTCONTROL#	 exit#	 history#	 fc -l#	 fc -l |wc -l#	 fc -l 10#	 hash#	 fc -l -3#	 fc -lfc -ln -3 > saved.sh将最后三条命令写入saved.sh文件中fc -l 15列出15号开始的命令fc -l 15 20显示从号数15~20的命令

如果fc带有-s选项,可用一个模式字符串来重新执行先前的命令。如fc -s
rm将重新执行匹配rm模式的最近执行的命令。 重新执行历史命令
要执行命令列表中的命令,须使用感叹号(称为bang)如果你用两个感叹号(!!)bang,bang,则将重新执行历史列表中最后的命令。如果你在感叹号后跟一个数字,将执行该数字指定的命令。如果键入的是感叹号加一个字符或字符串,那么以该字符或字符串开头的,最近的命令就会被重新执行。(^)也被用作编辑先前命令的一个快捷方法。!的具体用法见下表:

条件指示符 含义
! 标明历史替换的起始标志
!! 重新执行上一条命令
!N 重新执行历史列表中的第N条命令
!-N 重新执行当前命令的倒数第N条命令
!string 重新执行以string开头的最近一条命令
!?string? 重新执行包含string的最近一条命令
!?string?% 重新执行历史列表中含string最近的命令行参数
!$ 在当前命令行中使用最近执行命令的最后参数
!^ 在当前命令行中使用最近执行命令的第一个参数
!* 在当前命令行中使用最近执行命令的所有参数
!!string 将string追加到前一条命令中,并执行之
!Nstring 将string追加到第N条命令中,并执行之
!N:s/old/new 替换第N条命令中第一个old字符串为new
!N:g/old/new 将第N条命令中所有old字符串替换为new
^old^new 替换最近执行命令的old字符串为new
command!N:wn 执行当前命令,其参数由第N条命令的参数(wn)提供。wn为由0,1,…开始的数字,这些数字表示前面命令的单词标识。单词0为命令本身,1为它的第一个参数
$ date$ !! #=> 执行最近执行的一条命令 date$ !106 #=> 执行第106条命令,假设为date$ !d #=> 执行以d开头的命令$ dare #=> 命令不存在,执行失败$ ^r^t #=> 将dare中的r替换为t即为date$ echo 1 2 3$ echo !$ # 打印最近一条命令最后一个参数3$ echo 1 2 3$ echo !^ # 打印最近一条命令第一个参数$ echo 1 2 3$ echo !* # 打印最近一条命令的所有参数$ ls file1.txt$ cat !761$ # 查看第761条命令的第一个参数即file1.txt的内容$ !!:p # 显示但不执行最近执行的命令

FCEDIT和编辑命令
如果在fc命令-e参数后面跟着一个Linux编辑器的名字,即可在将历史列表中选定的命令行调入编辑器中。比如,fc
-e vim -1
-3将调用vi编辑器,并在/tmp目录中创建临时文件,将历史列表的倒数三个命令调入vi缓冲区中。可以对这些命令进行编辑也可以注释掉(在命令行钱加#即可注释之)。如果用户退出编辑器,命令将被回显并执行。
如果没有编辑器的名字,则使用FCEDIT变量的值(常在初始化文件中设置,要么是.bash_profile要么是.profile)。如果没有设置FCEDIT则使用EDITOR。如果结束编辑,并退出编辑器,则所有编辑过的命令都将被回显并执行。
Note:无论是直接退出编辑器还是保存并退出编辑器,命令都将被执行,除非注释掉或者删除掉。

$ FCEDIT=/usr/bin/vim$ pwd$ fc # 由于前面设置了FCEDIT变量的默认值,因此默认会将最近输入的pwd命令调入编辑器窗口,用户写入并退出编辑器后,键入的命令将被执行。$ fc -1 -3 # 将最后三条命令从历史列表调入到编辑器的缓冲区。
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » shell中history和fc内建命令的用法说明