手册页部分 1: 用户命令

退出打印视图

更新时间: 2014 年 7 月
 
 

trap(1)

名称

trap , onintr - 用于响应(硬件)信号的 shell 内置函数

用法概要

sh

trap [argument n [n2]...]

csh

onintr [-| label]

ksh88

*trap [arg sig [sig2...]]

ksh

+trap [-p] [action condition...]

描述

sh

当 shell 接收数字或符号信号 (n) 时,会读取和执行 trap 命令 argument。(注意:设置陷阱和执行陷阱时,分别扫描一次 argument。)陷阱命令按照信号编号或对应符号名称的顺序执行。尝试对输入到当前 shell 时忽略的信号设置陷阱将不起作用。尝试对信号 11(内存故障)设置陷阱会生成错误。如果 argument 不存在,则会将所有陷阱 n 重置为其原始值。如果 argument 为空字符串,则 shell 及其调用的命令将忽略该信号。如果 n0,将在退出 shell 时执行命令 argument。不带参数的 trap 命令输出与各信号编号关联的命令的列表。

csh

onintr 控制 shell 在发生中断时的操作。未指定参数时,onintr 在中断时将恢复 shell 的缺省操作。(shell 会终止 shell 脚本并返回到终端命令输入级别)。指定了 参数时,shell 将忽略所有中断。指定了 label 参数时,当收到中断信号时或者当某个子进程因为被中断而终止时,shell 将执行 goto label

ksh88

traparg 用作要在 shell 接收信号 sig 时读取和执行的命令。设置陷阱和执行陷阱时,分别扫描一次 arg。可以将各个 sig 指定为信号编号或信号名称。trap 命令按照信号编号的顺序执行。尝试对输入到当前 shell 时忽略的信号设置陷阱将不起作用。如果 arg 已省略或为 ,则会将各个 sig 的陷阱重置为其原始值。如果 arg 为空(空字符串,例如 "")字符串,则 shell 及其调用的命令将忽略该信号。如果 sigERR,则只要命令的退出状态为非零值,就会执行 arg。如果 sigDEBUG,则在每个命令之后执行 arg。对于在任何函数外部设置的 trap,如果 sig0EXIT,则会在退出 shell 时执行命令 arg。不带参数的 trap 命令输出与各信号编号关联的命令的列表。

在本手册页中,前面加有一个或两个 *(星号)的 ksh88(1) 命令将通过以下方式进行特殊处理:

  1. 命令完成时,该命令前面的变量赋值列表仍然有效。

  2. 在变量赋值之后处理 I/O 重定向。

  3. 脚本中包含的错误会导致其中止。

  4. 如果字的后面是前面加有**的命令且字为变量赋值的格式,则使用与变量赋值相同的规则扩展这些字。这表示在 = 符号之后执行波浪号替换,并且不执行字拆分和文件名生成。

ksh

trap 是一个特殊的内置函数,用于定义发生诸如接收信号之类的情况时要执行的操作。trap 也可以用于在标准输出中显示当前的陷阱设置。

如果 action-,则 trap 会将每种情况重置为缺省值。如果 action 为空字符串,则 shell 会忽略每种情况(如果发生)。否则,发生相应的情况之一时,shell 将读取和执行参数 action,就像由 eval 处理一样。陷阱操作将覆盖与每种指定情况关联的以前的所有操作。执行陷阱不会更改 $? 的值。

condition 可以是信号名称或信号编号,也可以是以下几项之一:

EXIT

shell 退出时执行该陷阱。如果在带有 function 保留字的函数中定义了该选项,函数返回时将在调用者的环境中执行陷阱。陷阱操作将恢复为调用函数时的值。

0

EXIT 相同。

DEBUG

在每个简单命令执行之前但在参数扩展之后执行。

ERR

每当 set -e 会导致 shell 退出时就会执行。

KEYBD

通过终端设备输入密钥时执行。

信号名称不区分大小写,sig 前缀是可选的。无法捕获或重置输入到非交互式 shell 时忽略的信号,但是这样做不会报告错误。使用除 1、2、3、6、9、14 和 15 之外的信号编号不可移植。

尽管 trap 是一个特殊内置命令,但是指定 shell 不了解的情况会导致 trap 以非零退出状态退出,但不会终止正在调用的 shell。

如果未指定操作或情况,则会将当前的所有陷阱设置写入标准输出。

ksh 中的 trap 内置命令支持以下选项:

–p

导致当前陷阱以可作为用于重新创建当前陷阱的 shell 输入处理的格式输出。

ksh 中的陷阱内置命令将以下列值之一退出:

0

成功完成。

>0

出现错误。

在本手册页中,前面有一个或两个 +(加号)的 ksh(1) 命令按以下方式特殊处理:

  1. 命令完成时,该命令前面的变量赋值列表仍然有效。

  2. 在变量赋值之后处理 I/O 重定向。

  3. 脚本中包含的错误会导致其中止。

  4. 它们不是有效的函数名称。

  5. 如果字的后面是前面加有 ++ 的命令且字为变量赋值的格式,则使用与变量赋值相同的规则扩展这些字。这表示在 = 符号之后执行波浪号替换,并且不执行字拆分和文件名生成。

属性

有关下列属性的说明,请参见 attributes(5)

属性类型
属性值
可用性
system/core-os

另请参见

csh(1)eval(1)exit(1)ksh(1)ksh88(1)sh(1)attributes(5)