在bash中设置-T - 它做了什么?


3

什么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

这使陷阱处理程序更复杂,但它允许您通常编写shell脚本的主要部分,而不记住程序可能会阻塞并采取相应的操作。


也许这个问题对你很感兴趣:stackoverflow.com/questions/6928946 / ...(关于errtrace)
hmontoliu 2011年

Answers:


10

来自help set

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

因此,如果您使用(即,几乎在shell脚本中的每个命令之前)trap调用函数DEBUG,然后调用另一个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.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.