INT信号を無限に複数回キャプチャする方法は?

INT信号を無限に複数回キャプチャする方法は?

色を追加するために、sedベースのスクリプトを介して対話型コマンド(ghci)の出力をパイプしました。

ghci | colorize.sh

colorize.sh似たようなものをどこで見つけることができますか?

#!/bin/bash
trap '' INT
sed '...some pattern...'

Ctrl-Cを押すと、ghciはそれを受け取り(終了しません)、sedが繁栄し(または再起動しますか?)、ghciの出力を処理し続けたいと思います。

このスクリプトはうまくいかず、理由がわかりません。

ベストアンサー1

まず、これがあなたの質問に対する答えではありませんが、何が起こっているのかを明確にするのに役立つことを願っています。私はあなたが起こっていると思うことが実際に起こらないかもしれないと思います。次の簡単な例を考えてみましょう。

# The 'writer' reads input from standard input and
# echos it to standard output.  It handles SIGINT by
# printing INT to standard output.
$ cat writer
#!/bin/bash
function foo() {
    echo "INT"
}

trap foo INT

while read x; do echo $x; done

# The 'reader' reads input from standard input and pipes what is
# read to 'sed', which converts it to upper case.  It ignores SIGINT.
# When it receives EOF on standard input, it writes "done".
$ cat reader
#!/bin/bash
trap '' INT
cat | sed -e 's/\(.*\)/\U\1/'
echo "done"

両方とも実行すると、出力は次にwriterパイプされますreader

$ ./writer | ./reader
hello
HELLO
^CINT
^CINT
^CINT
world
WORLD
^D
done
$

スクリプトwriterは標準入力からデータを読み取り、標準出力(パイプ)に書き込みます。スクリプトはreader標準入力(パイプ)から読み取って標準出力に書き込みます。をクリックするとCtrl-CwriterINT」readerは無視されます(複数回)。最後に(EOF)を入力しCtrl-Dwriter終了します。 EOFが受信されると終了し、reader「done」と記録されます。

SIGINTは何度も無視され、readerSIGINTが処理されてもパイプはsed中断されません。writer

おすすめ記事