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

har*_*ari 3 unix bash shell

set -T在 bash中是什么意思?它有什么作用?我相信它与 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
Run Code Online (Sandbox Code Playgroud)

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

Ign*_*ams 10

来自help set

  -T  If set, the DEBUG trap is inherited by shell functions.
Run Code Online (Sandbox Code Playgroud)

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