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

16 篇文章 1 订阅

内置命令:内置命令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 -3

fc -l -3
#705	 fc -l 10
#706	 hash
#707	 fc -l -3

fc -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 -l

fc -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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值