色を追加するために、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-C
「writer
INT」reader
は無視されます(複数回)。最後に(EOF)を入力しCtrl-D
てwriter
終了します。 EOFが受信されると終了し、reader
「done」と記録されます。
SIGINTは何度も無視され、reader
SIGINTが処理されてもパイプはsed
中断されません。writer