Current File : //usr/share/man/zh_CN.UTF-8/man1/trap.1
'\" te
.\" Copyright (c) 2007, 2011, Oracle and/or its affiliates.All rights reserved.
.\" Copyright 1989
.\" Portions Copyright (c) 1982-2007 AT&T Knowledge Ventures
.TH trap 1 "2011 年 7 月 12 日" "SunOS 5.11" "用户命令"
.SH 名称
trap, onintr \- 用于响应(硬件)信号的 shell 内置函数
.SH 用法概要
.SS "sh"
.LP
.nf
\fBtrap\fR [\fIargument\fR \fIn\fR [\fIn2\fR]...]
.fi

.SS "csh"
.LP
.nf
\fBonintr\fR [\fB-|\fR \fIlabel\fR]
.fi

.SS "ksh88"
.LP
.nf
\fB*trap\fR [\fIarg\fR \fIsig\fR [\fIsig2\fR...]]
.fi

.SS "ksh"
.LP
.nf
\fB+trap\fR [\fB-p\fR] [\fIaction\fR \fIcondition\fR...]
.fi

.SH 描述
.SS "sh"
.sp
.LP
当 shell 接收数字或符号信号 (\fIn\fR) 时,会读取和执行 \fBtrap\fR 命令 \fIargument\fR。(注意:在设置陷阱和获取陷阱时分别扫描一次 \fIargument\fR。)陷阱命令按照信号编号或对应符号名称的顺序执行。尝试对输入到当前 shell 时忽略的信号设置陷阱将不起作用。尝试对信号 11(内存故障)设置陷阱会生成错误。如果 \fIargument\fR 不存在,则会将所有陷阱 \fIn\fR 重置为其原始值。如果 \fIargument\fR 为空字符串,则 shell 及其调用的命令将忽略该信号。如果 \fIn\fR 为 \fB0\fR,将在退出 shell 时执行命令 \fIargument\fR。不带参数的 \fBtrap\fR 命令输出与各信号编号关联的命令的列表。
.SS "csh"
.sp
.LP
\fBonintr\fR 控制 shell 在发生中断时的操作。未指定参数时,\fBonintr\fR 在中断时将恢复 shell 的缺省操作。(shell 会终止 shell 脚本并返回到终端命令输入级别)。指定了 \fB-\fR 参数时,shell 将忽略所有中断。指定了 \fIlabel\fR 参数时,当收到中断信号时或者当某个子进程因为被中断而终止时,shell 将执行 \fBgoto\fR \fIlabel\fR。
.SS "ksh88"
.sp
.LP
\fBtrap\fR 将 \fIarg\fR 用作要在 shell 接收信号 \fIsig\fR 时读取和执行的命令。在设置陷阱和获取陷阱时分别扫描一次 \fIarg\fR。可以将各个 \fIsig\fR 指定为信号编号或信号名称。\fBtrap\fR 命令按照信号编号的顺序执行。尝试对输入到当前 shell 时忽略的信号设置陷阱将不起作用。如果 \fIarg\fR 已省略或为 \fB-\fR,则会将各个 \fIsig\fR 的陷阱重置为其原始值。如果 \fIarg\fR 为空(空字符串,例如 \fB""\fR)字符串,则 shell 及其调用的命令将忽略该信号。如果 \fIsig\fR 为 \fBERR\fR,则只要命令的退出状态为非零值,就会执行 \fIarg\fR。如果 \fIsig\fR 为 \fBDEBUG\fR,则在每个命令之后执行 \fIarg\fR。对于在任何函数外部设置的 \fBtrap\fR,如果 \fIsig\fR 为 \fB0\fR 或 \fBEXIT\fR,则会在退出 shell 时执行命令 \fIarg\fR。不带参数的 \fBtrap\fR 命令输出与各信号编号关联的命令的列表。
.sp
.LP
在本手册页中,前面加有一个或两个 *(星号)的 \fBksh88\fR(1) 命令将通过以下方式进行特殊处理:
.RS +4
.TP
1.
命令完成时,该命令前面的变量赋值列表仍然有效。
.RE
.RS +4
.TP
2.
在变量赋值之后处理 I/O 重定向。
.RE
.RS +4
.TP
3.
脚本中包含的错误会导致其中止。
.RE
.RS +4
.TP
4.
如果字的后面是前面加有**的命令且字为变量赋值的格式,则使用与变量赋值相同的规则扩展这些字。这表示在 \fB=\fR 符号之后执行波浪号替换,并且不执行字拆分和文件名生成。
.RE
.SS "ksh"
.sp
.LP
\fBtrap\fR 是一个特殊的内置函数,用于定义发生诸如接收信号之类的情况时要执行的操作。\fBtrap\fR 也可以用于在标准输出中显示当前的陷阱设置。 
.sp
.LP
如果 \fIaction\fR 为 \fB-\fR,则 \fBtrap\fR 会将每种情况重置为缺省值。如果 \fIaction\fR 为空字符串,则 shell 会忽略每种情况(如果发生)。否则,发生相应的情况之一时,shell 将读取和执行参数 \fIaction\fR,就像由 \fBeval\fR 处理一样。陷阱操作将覆盖与每种指定情况关联的以前的所有操作。执行陷阱不会更改 \fB$?\fR 的值。 
.sp
.LP
\fIcondition\fR 可以是信号名称或信号编号,也可以是以下几项之一:
.sp
.ne 2
.mk
.na
\fB\fBEXIT\fR\fR
.ad
.RS 9n
.rt  
shell 退出时执行该陷阱。如果在带有 \fBfunction\fR 保留字的函数中定义了该选项,函数返回时将在调用者的环境中执行陷阱。陷阱操作将恢复为调用函数时的值。
.RE

.sp
.ne 2
.mk
.na
\fB\fB0\fR\fR
.ad
.RS 9n
.rt  
与 \fBEXIT\fR 相同。
.RE

.sp
.ne 2
.mk
.na
\fB\fBDEBUG\fR\fR
.ad
.RS 9n
.rt  
在每个简单命令执行之前但在参数扩展之后执行。
.RE

.sp
.ne 2
.mk
.na
\fB\fBERR\fR\fR
.ad
.RS 9n
.rt  
每当 \fBset -e\fR 会导致 shell 退出时就会执行。
.RE

.sp
.ne 2
.mk
.na
\fB\fBKEYBD\fR\fR
.ad
.RS 9n
.rt  
通过终端设备输入密钥时执行。
.RE

.sp
.LP
信号名称不区分大小写,\fBsig\fR 前缀是可选的。无法捕获或重置输入到非交互式 shell 时忽略的信号,但是这样做不会报告错误。使用除 1、2、3、6、9、14 和 15 之外的信号编号不可移植。 
.sp
.LP
尽管 trap 是一个特殊内置命令,但是指定 shell 不了解的情况会导致 trap 以\fB非零\fR退出状态退出,但不会终止正在调用的 shell。
.sp
.LP
如果未指定操作或情况,则会将当前的所有陷阱设置写入标准输出。
.sp
.LP
\fBksh\fR 中的 \fBtrap\fR 内置命令支持以下选项:
.sp
.ne 2
.mk
.na
\fB\fB-p\fR\fR
.ad
.RS 6n
.rt  
导致当前陷阱以可作为用于重新创建当前陷阱的 shell 输入处理的格式输出。
.RE

.sp
.LP
\fBksh\fR 中的陷阱内置命令将以下列值之一退出: 
.sp
.ne 2
.mk
.na
\fB\fB0\fR\fR
.ad
.RS 6n
.rt  
成功完成。
.RE

.sp
.ne 2
.mk
.na
\fB\fB>0\fR\fR
.ad
.RS 6n
.rt  
出现错误。
.RE

.sp
.LP
在本手册页中,前面有一个或两个 \fB+\fR(加号)的 \fBksh\fR(1) 命令按以下方式特殊处理:
.RS +4
.TP
1.
命令完成时,该命令前面的变量赋值列表仍然有效。
.RE
.RS +4
.TP
2.
在变量赋值之后处理 I/O 重定向。
.RE
.RS +4
.TP
3.
脚本中包含的错误会导致其中止。
.RE
.RS +4
.TP
4.
它们不是有效的函数名称。
.RE
.RS +4
.TP
5.
如果字的后面是前面加有 \fB++\fR 的命令且字为变量赋值的格式,则使用与变量赋值相同的规则扩展这些字。这表示在 \fB=\fR 符号之后执行波浪号替换,并且不执行字拆分和文件名生成。
.RE
.SH 属性
.sp
.LP
有关下列属性的说明,请参见 \fBattributes\fR(5):
.sp

.sp
.TS
tab() box;
cw(2.75i) |cw(2.75i) 
lw(2.75i) |lw(2.75i) 
.
属性类型属性值
_
可用性system/core-os
.TE

.SH 另请参见
.sp
.LP
\fBcsh\fR(1)、\fBeval\fR(1)、\fBexit\fR(1)、\fBksh\fR(1)、\fBksh88\fR(1)、\fBsh\fR(1)、\fBattributes\fR(5)