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-C" writerINT" reader가 무시됩니다(여러 번). 마지막으로 (EOF)를 입력 Ctrl-D하고 writer종료합니다. EOF가 수신 되면 reader종료되고 "done"이라고 기록됩니다.

SIGINT 는 여러 번 무시되며 readerSIGINT가 처리될 때 파이프가 sed중단 되지 않습니다.writer

관련 정보