在 bash 中设置 -T - 它起什么作用?

在 bash 中设置 -T - 它起什么作用?

在 bash 中是什么set -T意思?它有什么作用?我相信它与 Unix 中的陷阱有关,但我不确定。

我发现

如果在前台子进程仍在运行时立即调用陷阱,许多此类构造就会变得更加简单。您只需安装一个陷阱处理程序,它会对问题执行“某些操作”,并且每次您遇到 SIGINT(或 SIGQUIT)时都会调用它。就像 C 程序中的信号处理程序被立即调用一样。也许我太像 C 程序员了,但我发现延迟的 sh 行为非常不直观。

#! /bin/sh

onsig()
{     trap SIGINT     kill -SIGINT $$
}
set -T            # set async execution of traps on FreeBSD
trap onsig SIGINT
./some-blocking-program
set +T            # set traps execution behaviour back to normal

这使得陷阱处理程序稍微复杂一些,但它允许您像往常一样编写 shell 脚本的主要部分,而不必考虑程序可能会阻塞并对其采取适当的操作。

答案1

help set

  -T  If set, the DEBUG trap is inherited by shell functions.

因此,如果您使用trap来调用函数DEBUG(即,几乎在 shell 脚本中的每个命令之前),然后调用另一个 shell 脚本,则该脚本中也会发生捕获。如果没有此选项,子 shell 中将不存在捕获,并且其中调用的脚本将不被捕获地运行。

答案2

这就是man bash所说的(提示:这是一个巨大的文件,我通常会搜索..lotsofspaces..set

If  set,  any  traps  on  DEBUG and RETURN are inherited by
shell functions, command substitutions, and  commands  exe-
cuted  in  a  subshell  environment.   The DEBUG and RETURN
traps are normally not inherited in such cases.

相关内容