荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: tian.bbs@bbs.tju.edu.cn (Fastboot in C++), 信区: Linux
标  题: 教程>>>>>第二十二课 在Bash中的操作
发信站: 天大求实BBS站 (Mon Jun  2 20:01:31 2003)
转信站: SZU!news.tiaozhan.com!UTJ


Linux教程>>>>>第二十二课 在Bash中的操作
  命令和文件名扩展特性

  Bash命令行具有命令和文件名扩展特性。当输入一个还没完成的命令或文件名时
,只需键入Tab键就能激活命令和文件名扩展特性,从而完成该命令的剩余输入。如
果有多个命令或文件的前缀相同,Bash将响铃并等待用户输入足够的字符,以便选择
唯一的命令或文件名,如果找到,系统将自动补齐搜索到的命令或文件名,用户按回
车键后,系统将执行这条指令。例如:

  $ cat pre

  $ cat preface

  Bash也能列出当前目录下部分匹配的文件名来完成文件名扩展。如果键入Esc,
然后键入?,shell将列出所有与输入的字符串相匹配的文件名。例如下例,在没有完
成的输入后键入Esc ?,shell将列出所有与输入的字符串相匹配的字符串,然后shell
回显命令行,根据列出的文件名,可以键入要输入的文件名或按下Tab键来完成文件
名扩展。例如:

  $ ls

  document docudrama

  $ cat doc

  document

  docudrama

  $ cat docudrama

  [例]下面是一个目录包含的文件列表:

  Firebird2.7.tgz Firebird.README Firebird2.60.tgz

  FireBird Firebird2.60.tgz.README

  现在要删除Firebird2.60.tgz.README文件,键入:

  $ rm –f Fi

  系统会发出警报声,并且自动将命令行补全为:

  $ rm –f Fire

  并等待用户进一步输入文件名的后面部分。现在再键入:

  b

  系统再次发出警报声,并且自动将命令行补全为:

  $ rm –f Firebird

  并等待用户进一步输入文件名的后面部分。现在再键入:

  2.6

  系统再次发出警报声,并且自动将命令行补全为:

  $ rm –f Firebird2.60.tgz

  并等待用户进一步输入文件名的后面部分。现在再键入:

  .

  此时命令将被补全为:

  $ rm –f Firebird2.60.tgz..README

  从上例可以看到,bash总是尽力根据用户输入的信息来补全命令。当无法根据现
有信息补全命令时,则提示用户再给出更多的信息,然后再根据用户的提示来进一步
补全命令。作为用户最好是能够一次性给出足够的信息以便于bash进行命令补全;否
则多按几次,时间也就消耗掉了。

  命令行编辑

  在Bash中可以对命令行进行编辑,以便用户在执行所键入的命令之前能够修改所
键入的命令。如果在键入命令时出现拼写错误,只需在运行所键入的命令之前,使用
编辑命令来纠正编辑错误,然后执行它,而不用重新输入整行命令。这个功能对以长
路径文件名作参数的命令特别有用。

  表10-2是对命令行编辑操作的一个总结。


命令行编辑操作 功能
Ctrl+b或左箭头键 左移一个字符(移至前一个字符)
Ctrl+f或右箭头键 右移一个字符(移至后一个字符)
Ctrl+a 移至行首
Ctrl+e 移至行尾
Esc b 左移一个单词
Esc f 右移一个单词
Del 删除光标所在处的字符
Ctrl+d 删除光标所在处的字符
BACKSPACE或Ctrl+h 删除光标左边的字符
Ctrl+k 删除至行尾


  在Bash中,history命令能够保存最近所执行的命令。这些命令的历史记录号从
1开始,只有有限个命令可以被保存起来,最多500个,即history命令的历史记录号
缺省值为500。要查看最近执行的命令,只要键入history命令,然后键入回车键,最
近执行过的命令即按先后顺序被显示出来(各条命令前的数字为历史记录号)。

  [例]

  $ history

  1 cp mydata today

  2 vi mydata

  3 mv mydata reports

  4 cd reports

  5 ls

  …

  所有这些命令都被称为事件(event),一个事件表示一个操作已经发生,即一个
命令已被执行。这些事件根据它们被执行的先后顺序用数字标识,这一标识称为历史
事件号。最后执行的历史事件的事件号最大。每个事件都可由它的历史事件号或命令
的初始字符或字符串等确定。

  利用history命令能够查询以前的事件,并可把它们显示到命令行上执行这一事
件。最简便的方法就是利用上下箭头键,把先前的事件逐次显示到命令行。这个操作
不需要运行history命令就可以执行。按动一下上箭头键,那么上一次执行的一个事
件就将出现在命令行上,再按一下,上一次的前一事件又会出现在命令行上;按动一
下下箭头键,将会使当前事件的下一事件出现在命令行上。

  Bash也可以通过键入Esc、Tab键来完成对历史事件的字符扩展。和标准命令行扩
展特性一样,键入历史事件的部分字符串,然后键入Esc,再键入Tab键,与刚才键入
的字符串相匹配的历史事件将自动扩展并回显到命令行处。如果不止一个事件与输入
的字符串相匹配,就会听到一声响铃,继续键入字符或字符串,shell将会唯一确定
用户所要键入的历史事件。

  还有一个查询和执行历史事件的命令——!命令。在!命令后键入与历史事件相关
联的字符,这个关联字符可以是历史事件的历史事件号,也可以是该事件的前几个字
符。在下面的例子中,查询到历史事件号为3的事件,然后又用其开头的几个字符去
匹配,也查询到该命令。

  [例]

  $ !3

  mv mydata reports

  $ !mv

  mv mydata reports

  也可以用一个偏移量(相对于历史事件列表中最后一个事件)来查询历史事件。负
的偏移量将从历史事件列表表尾向前偏移。在下面的例子中,历史事件号为2的事件
“vi mydata”就是用一个负的偏移量查询到的。必须注意的是,这个偏移量是相对
于历史事件列表中的最后一个事件的。在本例中,历史事件列表中最后一个事件是事
件5,历史事件列表中第一个事件为1。从历史事件号为5的事件,往前偏移4,即是历
史事件号为2的事件。

  [例]

  $ !-4

  vi mydata

  如果键入!!,则系统默认为上一事件。下面的例子中,用户在命令行上键入!!命
令,系统将执行上一事件:“ls”命令。

  [例]

  $ !!

  ls

  mydata today reports

  也可以用“模式”来搜索一个历史事件。搜索的“模式”必须用符号“?”括起
来。下例是用“模式”“?myd?”来搜索历史事件号为3的历史事件“vi mydata”。


  [例]

  $ !?myd?

  vi mydata

  查询历史事件

  可以在命令行上编辑历史事件列表中的事件。表10-3列出了查询历史事件列表的
各种操作。

  表10-3 查询历史事件操作


查询历史事件操作 功能
Ctrl+n或向下光标键 移至历史事件列表中当前事件的下一历史事件
Ctrl+p或向上光标键 移至历史事件列表中当前事件的前一历史事件
Esc < 移至历史事件列表表首
Esc > 移至历史事件列表表尾
!event_num 用历史事件号来定位一个历史事件
!characters 用历史事件的字符前缀来查询一个历史事件
!?pattern 用“模式”来查询历史事件列表中的事件
!-event_num 通过偏移量来定位历史事件


  配置history:HISTFILE及HISTSIZE

  系统保存的历史事件数被保存在一个特定的系统变量中,这个变量就是HISTSIZE
。这个变量的缺省值通常被设置为500。这个值可以被修改。例如:

  $ HISTSIZE=10

  将HISTSIZE的值重新设置为10。

  历史事件被保存在一个文件中,文件名由变量HISTFILE指定。通常这个文件的缺
省名是.bash_history。通过给变量HISTFILE赋值,可以指定新的文件名。

  [例]

  $ echo $HISTFILE

  /home/lisa/.bash_history

  $ HISTFILE=”/home/lisa/newhist”

  $ echo $HISTFILE

  /home/lisa/newhist

  以上操作先显示变量HISTFILE的值,然后赋予它新的值“/home/lisa/newhist”
,以后所有的历史事件将被保存在newhist文件中。






--
 The Best Way Of Learning To Use 【The Linux】 Is To Use It.
※ 来源:·天大求实 bbs.tju.edu.cn·[FROM: 天大求实BBS站]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店