bashで-Tを設定します-それは何をしますか?


3

set -Tbashの意味は何ですか?それは何をするためのものか?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

これにより、トラップハンドラーが少し複雑になりますが、プログラムがブロックして適切なアクションをとることを意識せずに、通常どおりシェルスクリプトの主要部分を記述できます。


たぶん、この質問はあなたにとって興味があるでしょう:stackoverflow.com/questions/6928946/…(errtraceについて)
hmontoliu

回答:


10

からhelp set

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

したがってtrap、関数をDEBUG(つまり、シェルスクリプトのすべてのコマンドの前に)呼び出してから別のシェルスクリプトを呼び出すと、そのスクリプトでもトラップが発生します。このオプションがないと、トラップはサブシェルに存在せず、トラップで呼び出されたスクリプトはトラップされずに実行されます。


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.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.