2.3 shell
如果工作在文本(非图形)界面下,或者是工作在图形界面下使用终端模拟窗口,那么,shell将作为命令解释器运行。由shell来显示提示符,当输入命令后,shell执行该命令并显示另一个提示符。
本节将介绍如何识别正在使用的shell和如何校正命令行上的错误。其中,将讲述如何退出一个正在运行的命令和如何编辑命令行。本书的许多章都介绍了shell:第5章引入shell,第8章介绍bash和部分TC Shell的内容,第9章专门介绍TC Shell,第11章介绍如何使用bash编写程序(或者称为shell脚本)。
2.3.1 识别当前运行的是哪种shell
shell存在很多种,如bash、tcsh(TC Shell)、zsh(Z Shell)等。本书将讨论bash和tcsh。通过ps工具可识别出正在运行的shell。在shell提示符后输入ps,然后按下RETURN键,如下所示:
$ ps
PID TTY TIME CMD
2402 pts/5 00:00:00 bash
7174 pts/5 00:00:00 ps
这个命令的执行结果表明系统正在运行两个工具或者说是两个命令:bash和ps。如果其他shell正在运行,那么ps会显示其名称。如正在运行的是tcsh,那么ps就显示tcsh而不是bash。
2.3.2 校正错误
本节主要介绍如何校正通过字符界面登录时出现的错误(如拼写错误)。由于shell在按下RETURN键之前,将不对命令行和其他文本进行解释,所以,可在按下RETURN键之前校正输入错误。
校正输入错误有很多种方式:一次删除一个字符,一次删除一个单词,或者一次删除整个命令行。一旦按下RETURN键,就不能再对错误进行校正了,只能等待命令的运行结束或者终止程序的执行。
1. 删除字符
当从键盘输入字符时,可以通过按下删除键来删除错误输入的每一个字符。使用删除键想删除多少字符就可删除多少,但一般不会到达一行的首字符(提示符)之前。
默认的删除键为BACKSPACE键。如果此键不能奏效,可试一试DELETE键或者CONTROL+H组合键。如果这些键都不起作用,可使用下面的命令来设定自己的字符删除键和行删除键(参见第2.3.2节中的“删除行”部分)。
$ stty ek
更改字符删除键的更多信息可参见第Ⅴ部分命令stty的“示例”一节。
|
|
用CONTROL+Z挂起程序 |
|
提示 |
按下程序挂起键(通常是CONTROL+Z组合键),虽然不能纠正错误,但可将程序挂起,这时屏幕会显示一段包含stopped单词的消息,表示通过作业控制功能刚才运行的作业将被停止。通过输入命令fg可再把此作业切换到前台,这样该作业便可从挂起的地方继续运行。更多信息参见第8.2.6节中的“bg:将作业移到后台运行”部分。 |
2. 删除单词
通过按下CONTROL+W组合键可删除一个单词。此处的单词是指不包含空格和TAB的连续字符序列。当按下CONTROL+W组合键后,光标将移动到当前单词(如果当前正处于输入单词状态)或前面一个单词(如果在按下组合键前输入的是空格或TAB键)的起始处左端,光标所经过的单词将被删除。
3. 删除行
在按下RETURN键之前,通过按下行删除键即可将一行删除。当按下行删除键后,光标将往左端移动,一直到达行开始处,其经过的字符将被删除。默认的行删除键为CONTROL+U,如果此键不起作用,可试一试CONTROL+X键。如果这些键都不起作用,可以通过输入下面的命令来设置字符删除键和行删除键。
$ stty ek
更改行删除键的更多信息可参见第Ⅴ部分的第14.71节中的“示例”一节。
4. 终止执行
有时,用户可能希望终止正在运行的某个程序。例如,当Linux执行一个很耗时的任务,如显示一个有几百页内容的文件或者复制一个本不想复制的文件时,用户可能希望终止此任务。
在字符界面下终止一个程序,可通过按下中断键(通常是CONTROL+C,有时是DELETE或DEL键)来实现。当按下此键后,Linux操作系统会向正在运行的程序和shell发送终端中断信号。此信号产生的效果与程序有关。有些程序立即停止执行,有些程序则忽略此信号,还有些程序将采取一些其他的动作。当shell收到了终端中断信号后,就显示提示符以等待另一个命令的输入。有关更改程序终止键的更多信息请参见第Ⅴ部分的第14.71节中的“示例”一节。
如果上述方法不能终止程序,可尝试使用程序挂起键(通常是CONTROL+Z)来停止程序的运行。输入jobs命令可得到程序对应的作业号(显示在行左端的中括号内,如[1]),然后使用kill来终止此程序。kill命令根据其后的参数向对应的作业发送信号。注意,作业号之前要加百分号%(如%1),如下所示:
$ bigjob
^Z
[1]+ Stopped bigjob
$ jobs
[1]+ Stopped bigjob
$ kill %1
[1]+ Stopped bigjob
$ RETURN
[1]+ Killed bigjob
默认情况下,kill发送的是软件终止信号(-TERM),如果此信号不起作用,可使用-KILL信号。如下所示:
$ kill –KILL %1
任何正在运行的程序都不能忽略kill信号,因为此信号能强制程序退出。kill命令返回一个提示符,若再次按下RETURN键则可看到确认消息。更多关于作业控制的信息可参见第5.3节。信号列表如表11-5所示。
5. 重复/编辑命令行
按下方向键中的向上键,在命令行上可得到前一个命令。重复按下此键,就会看到更前面的一些命令。然后,按下RETURN键就可再次执行这些命令。若按方向键中的向下键,就可向下浏览命令行。
方向键中的左右键用来移动命令行上的光标。通过这两个键,可在命令行的任意位置增加一个字符,或者使用删除键删除一个字符。
更多关于命令行的复杂编辑:bash可参见第8.5.2一节,tcsh可参见第9.5.2节。






