색상을 추가하기 위해 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