#!/bin/bash --
echo "$$"
LC_ALL=C sed 's/[!-~]/b/g' /tmp/bigfile > /tmp/outfile
echo end of script
QUIT
송신 신호를 사용 하면 Ctrl + \
다음과 같은 결과가 출력됩니다.
# ./script.sh
6739
^\./script.sh: line 5: 6740 Quit LC_ALL=C sed 's/[!-~]/b/g' /tmp/bigfile > /tmp/outfile
end of script
예상대로 종료 sed
되고 코어 덤프가 발생하지만 스크립트는 계속됩니다. 이것이 예상되는 동작입니까? and 를 사용 bash
하지만 ash
not dash
or 을 사용하여 이런 일이 나에게 일어났습니다 ksh93
.
답변1
예, bash
무시합니다 SIGQUIT
. 에서 인용수동(강조):
3.7.6 신호
Bash가 대화형일 때 트랩 없이 무시되고
SIGTERM
(kill 0
대화형 쉘이 종료되지 않도록) 포착되어 처리됩니다( 내장 명령이 중단될 수SIGINT
있도록 ).wait
Bash가 이를 수신하면SIGINT
실행 루프에서 벗어납니다.모든 경우에 Bash는 무시합니다.SIGQUIT
. 작업 제어가 적용되는 경우 Bash는SIGTTIN
,SIGTTOU
및 를 무시합니다SIGTSTP
.
이는 비표준 동작이며 대부분의 다른 쉘에서는 이를 수행하지 않습니다.
설득력이 없다고 생각되면 소스 코드를 살펴보세요: shell_initialize()
-> initialize_signals(0)
-> initialize_shell_signals()
->set_signal_handler (SIGQUIT, SIG_IGN)
무조건 에서 호출됩니다 main()
.