2019年8月4日 星期日

shell选项设置与显示shell选项

1. shell选项:set -o, set +o 
正如前面讨论,对于C-shell家族来说,可以使用shell变量控制shell行为的各个方面。对于Bourne shell 家族来说,则需要使用shell选项。例如,shell是交互式的只是非交互式的就是由shell选项来控制的。
shell选项就是on/off开关一样。当打开一个选项时,就说设置了这个歌选项。浙江告诉shell以某种方式运行。当关闭这个选项时,就说复位了这个选项。这也就是告诉shell停止以这种方式运行。
例如,shell支持一个叫做“作业控制”的功能,允许在后台运行程序。打开作业控制需要设置monitor 选项,关闭作业控制,需要复位monitor选项。默认情况下,交互式的shell选项中monitor选项是打开的。

提示:
单词“set”和“unset”跟俊讨论的是shell选项还是变量,其含义有所不同。
shell选项或者是off或者是on,它们不需要创建。因此,当设置shell选项时,就将shell选项打开。当复位shell选项时,就将shell选项关闭。
变量就不同了。当设置变量时,实际上时创建变量。当复位比纳凉时,实际上时永久地删除变量。
shell选项设置或复位的方式有两种。第一种,当shell启动时,可以以普通的方式指定选项,即为命令指定一个或者多个选项。例如下述命令就是启动一个Korn shell,并设置(打开)monitor选项:

ksh -m

除了标准的命令行选项外,还有另外一种打开或者关闭shell选项的方式,即使用set命令的一种变体。下面给出该命令的语法。要设置一个选项,可以使用:

set -o option

要复位一个选项,可以使用:

set +o option

其中option是选项的“长名称”。
例如,假设shell正在运行,您希望设置monitor选项,则可以使用:

set -o monitor

为了复位monitor选项,可以使用:

set +o monitor

在键入o时一定要小心,这是一个小写字母“o” (o代表“option”选项)。
刚开始时,使用-o打开选项,而使用+o关闭选项可能看上去比较奇怪。但是时合理的。
shell每次启动时,根据shell时交互式的还是非交互式的,各种选项或者被默认设置,或者被默认复位。设计shell的程序员知道人们会如何使用shell,因此在大多数情况下,默认shell选项就可以满足要求。这意味着极少需要修改shell选项。
但是如果需要修改shell选项,则可以参照下表:该表中列出了交互式shell中最有用的shell选项。至于前面讨论过的环境变量,如果不能完全理解,也不用担心。该列表只是用于参考。
这个表摘要汇总了交互式shell中有用的shell选项。

最左边的一列说明哪个shell支持这种选项,其中B=Bash, K=Korn Shell。圆点表示相应的shell不支持该选项。注意有一些选项,如history,只有长名称,没有短的选项名称。

注:(1)尽管Bash支持emacsvi选项,但是它不使用-E-V。(2)Korn shell 使用-h选项,但是不支持长名称bashhall。
除了上表中的选项之外,还有许多其他的shell选项,这些选项大多数在非交互式的shell中有用(也就是说,当编写shell脚本时)。另外,如果使用的是Bash,那么有一个特殊的命令shopt(shell opition, shell选项)可以用来访问更多的选项。
提示:
关于shell选项的权威信息,请参考shell说明书页。

man bash
man ksh

对于Bash,您需要搜索“SHELL BUILTIN COMMANDS”。对于Korn shell,您需要搜索“Built-in Commands”或者“Special Commands”。
2. 显示shell选项
Bourne shell家族使用shell选项控制shell操作。要显示shell选项的当前值,可以使用set -o或者set +o命令本身:

set -o
set +o

使用set -o将以一种容易阅读的方式显示所有shell选项的当前状态。使用set +o将以一种紧缩的格式显示相同信息,这种格式的信息适合作shell脚本或者程序的数据。
如果输出对于屏幕来说太长,可以将输出发送给less,从而每次一屏地显示出信息:

set -o | less
set +o | less

如果想练习选项的设置和复位,可以试一试ignoreeof选项。按下^D(eof键)可以终止shell。但是,如果被终止的shell碰巧是登录shell,那么系统将注销。
然而,人们很容易不小心按下^D键,从而在不经意间将自己注销。为了防止这种情况的出现,可以设置ignorreeof选项。这样就告诉shell在按下^D键不结束shell,必须输入exit或者logout命令才能结束shell。设置该选项命令如下:

set -o ignoreeof

复位该选项的命令如下:

set +o ignoreeof

您可以设置,复位及显示该选项。每次修改时,都显示该选项的当前状态,然后按下^D键看看发生什么情况。

沒有留言:

張貼留言