bash参考手册之四(shell内建命令)续五

本文详细介绍了Bash shell中set命令的功能与用法,包括如何通过各种选项改变shell的行为特性,例如作业控制、命令历史记录、文件名扩展等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

4.3 修改shell的行为

•内建命令set:改变shell的属性和位置参数的值。
•内建命令shopt:修改shell的可选的行为。


4.3.1 内建命令set

这个命令太复杂了,因此单独用一节来描述它。set允许你改变shell选项的值和设置位置参数,或者显示shell变量的名字和值。

set

set [--abefhkmnptuvxBCEHPT] [-o option-name] [argument …]

set [+abefhkmnptuvxBCEHPT] [+o option-name] [argument …]

如果不带选项或参数,则set显示所有shell变量的名字和值,以及所有函数,根据区域设置进行排序,显示的格式为可以重用为输入(设置或者重新设置当前的各个变量)的格式。只读变量不能被重新设置。在POSIX模式,仅仅列出shell变量。
如果带选项,则设置或者取消shell变量。选项的含义如下:

 -a

标记那些被修改或者创建的变量和函数——这些变量和函数将被export到后续命令环境中。

 -b

引起系统立即报告被终止的后台作业的状态,而不是在打印下一个提示符之前。

 -e

如果管道(见管道)返回一个非零的状态时立即退出,该管道可以由以下内容组成:一个单一的简单的命令(见简单指令),或在括号中的一个子shell命令(见命令组合),或在大括号包围的命令列表中的某个被执行的命令(见命令分组)。下述情况下,shell不会退出:如果失败的命令是命令列表的一部分,并且后面紧随while或者until关键字,在if语句中的测试的一部分,在 && 或 | | 列表中执行的命令(除了在最终的 && 或 | | 之后的命令),在管道中的最后一个任何命令,或如果该命令的返回状态被 ! 反转。 如果设置了ERR陷阱,该陷阱在shell退出之前执行。

此选项适用于shell环境中,每个独自的子shell环境中(见命令执行环境),并可能导致子shell在执行该子shell中所有命令前退出。

 -f

关闭文件名扩展(通配)

-h

查找执行命令时,定位和记住(哈希)命令。这个选项默认打开。

-k

把某条命令的所有赋值语句形式的参数放到环境中,而不是那些在命令前的参数。

-m

打开作业控制(见作业控制)

-n

读取命令,但是不执行,可以用来检查脚本的语法错误。交互shell忽略此选项。

-o option-name

设置option-name对应的选项:

allexport

同-a

braceexpand

同-B

emacs

使用emacs风格的行编辑界面(见命令行编辑)。也影响读-e的编辑界面。

errexit

同-e

errtrace

同-E

functrace

同-T

hashall

同-h

histexpand

同-H

history

启用命令历史, 见Bash历史工具。这个选项在交互shell中缺省启用。

ignoreeof

交互式shell读到EOF时,不退出。

keyword

同-k

monitor

同-m

noclobber

同-C

noexec

同-n

noglob

同-f

nolog

当前忽略。

notify

同-b

nounset

同-u

onecmd

同-t

physical

同-P

pipefail

如果设置此选项,则管道的返回值是最后(最右边)的命令的非零返回值,或者,如果所有在管道中的命令都成功退出时,是0。此选项默认关闭。

posix

修改那些与POSIX标准不同的Bash默认行为,使之符合POSIX标准(见Bash POSIX模式)。此选项使Bash的行为成为POSIX标准的严格超集。

privileged

同-p

verbose

同-v

vi

使用vi风格的行编辑界面。此选项也影响read -e的编辑界面。

xtrace

同-x

 -p

打开特权模式。在这种模式下,不处理$BASH_ENV和$ENV文件,shell函数不能从环境,以及SHELLOPTS,BASHOPTS,CDPATH和GLOBIGNORE变量中继承,如果它们出现在环境中,都将被忽略。如果shell是由不等于真用户(组)ID的有效用户(组)ID启动的,则不提供-p选项,这些动作被执行,并且有效用户ID被设置为实际用户ID。如果使用-p选项启动,有效用户ID不被复位。关闭此选项会导致有效用户ID和组ID被设置为真实用户ID和组ID。

 -t

读取并执行一条命令后退出。

-u

在执行参数扩展时,把未设置变量和参数,除了特殊参数‘@’ 或者‘*’之外,视为错误。错误信息写到标准错误,并且退出非交互shell。

-v

读取shell输入时,打印shell输入行。

-x

打印简单命令、for命令、case命令、select命令,和扩展后执行前的算术for命令和该命令的参数或者相关的单词列表的跟踪信息。PS4变量的值被扩展,且在命令及其扩展参数前打印该扩展结果。

-B

shell执行大括号扩展(见大括号扩展)。此选项默认打开。

-C

防止使用‘>’,‘>&’和‘<>’ 的输出重定向覆盖已经存在的文件。

-E

如果设置此选项,shell函数,命令替换,和在子shell环境中执行的命令继承所有ERR陷阱。一般来说,ERR陷阱在上述情形下不被继承。

-H

启用‘!’风格的历史替换(见历史交互)。对于交互shell,此选项默认打开。

 -P

如果设置的话,执行如cd改变当前目录等命令时,不遵循符号链接。而使用物理目录。默认情况下,执行改变当前目录的命令时,bash遵循目录的逻辑链。

例如,如果/usr/sys 是 /usr/local/sys的符号链接:

$ cd /usr/sys; echo $PWD

/usr/sys

$ cd ..; pwd

/usr

如果启用-P的话,结果是:

$ cd /usr/sys; echo $PWD

/usr/local/sys

$ cd ..; pwd

/usr/local

-T

如果设置此选项,则DEBUG和RETURN陷阱将被shell函数,命令替换,以及在子shell环境中执行的命令继承。在这种情况下,DEBUG和RETURN陷阱通常不会继承。

--

如果此选项后面没有参数,则位置参数被取消。否则,即使arguments中有以‘-’开头的项目,也被设置为位置参数。

-

选项结束的信号,把余下的arguments都赋值给位置参数。关闭-x和-v。如果没有arguments,则位置参数保持不变。

使用'+',而不是' - ',使这些选项被关闭。这些选项也可用在调用shell时。当前的选项设置可以使用$-获得 。

剩余的N个argument是位置参数,并以$1,$2,...$N的顺序被赋值。特殊参数#被设置为N。
返回状态始终是零,除非提供了无效的选项。



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值