set -T在 bash中是什么意思?它有什么作用?我相信它与 Unix 中的陷阱有关,但我不确定。
我发现了这个:
如果在前台子进程仍在运行时立即调用陷阱,则许多此类构造将变得更加简单。您只需安装一个陷阱处理程序,该处理程序对问题执行“某些操作”,并且每次您点击 SIGINT(或 SIGQUIT)时都会调用它。就像 C 程序中的信号处理程序被立即调用一样。也许我是一个 C 程序员,但我发现延迟的 sh 行为非常不直观。
Run Code Online (Sandbox Code Playgroud)#! /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 脚本的主要部分,而无需记住程序可能会阻塞并对其采取适当的操作。
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 中将不存在陷阱,并且在其中调用的脚本将不受陷阱地运行。