概述讨论shell命令查询以前的事件
时间:2010-11-16 来源:mydear
学习shell命令行时,你可能会遇到执行问题,这里将介绍执shell命令问题的解决方法,在这里拿出来和大家分享一下。利用history命令 能够查询以前的事件,并可把它们显示到shell命令行上执行这一事件。最简便的方法就是利用上下箭头键,把先前的事件逐次显示到命令行。这个操作不需要 运行history命令就可以执行。按动一下上箭头键,那么上一次执行的一个事件就将出现在命令行上,再按一下,上一次的前一事件又会出现在命令行上;按 动一下下箭头键,将会使当前事件的下一事件出现在命令行上。
Bash也可以通过键入Esc、Tab键来完成对历史事件的字符扩展。和标准shell命令行扩展特性一样,键入历史事件的部分字符串,然后键入 Esc,再键入Tab键,与刚才键入的字符串相匹配的历史事件将自动扩展并回显到命令行处。如果不止一个事件与输入的字符串相匹配,就会听到一声响铃,继 续键入字符或字符串,shell命令将会唯一确定用户所要键入的历史事件。
还有一个查询和执行历史事件的命令——!shell命令。在!命令后键入与历史事件相关联的字符,这个关联字符可以是历史事件的历史事件号,也可以 是该事件的前几个字符。在下面的例子中,查询到历史事件号为3的事件,然后又用其开头的几个字符去匹配,也查询到该shell命令。
$ !3 mv mydata reports
$ !mv mv mydata reports
也可以用一个偏移量(相对于历史事件列表中最后一个事件)来查询历史事件。负的偏移量将从历史事件列表表尾向前偏移。在下面的例子中,历史事件号为 2的事件“vi mydata”就是用一个负的偏移量查询到的。必须注意的是,这个偏移量是相对于历史事件列表中的最后一个事件的。在本例中,历史事件列表中最后一个事件 是事件5,历史事件列表中第一个事件为1。从历史事件号为5的事件,往前偏移4,即是历史事件号为2的事件。
$ !-4 vi mydata
如果键入!!,则系统默认为上一事件。下面的例子中,用户在shell命行上键入!!命令,系统将执行上一事件:“ls”命令。
$ !! ls mydata today reports
shell命令行也可以用“模式”来搜索一个历史事件。搜索的“模式”必须用符号“?”括起来。下例是用“模式”“?myd?”来搜索历史事件号为3的历史事件“vi mydata”。 $ !?myd? vi mydata