内置命令:内置命令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命令,有两种用法:
- 从历史列表中选择命令
- 在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 # 将最后三条命令从历史列表调入到编辑器的缓冲区。