bash 스크립트의 Ctrl-C


22

스크립트가 현재 실행중인 명령뿐만 아니라 스크립트가 중단되도록 bash 스크립트에서 ctrl+ c처리를 어떻게 구현 합니까?

(장기 실행되는 명령을 실행하는 스크립트가 있다고 상상해보십시오. 사용자가 ctrl+를 c누르고 명령을 중단하지만 스크립트는 진행됩니다.) 둘 다 종료되는 방식으로 동작해야합니다.


1
OS에 작업 제어가 사용 가능한 경우 다른 옵션은 해당 스크립트를 중지하는 것입니다 (일반적으로 crtl-z 사용). 을 (를) 사용하여 백그라운드에서 작업을 bg계속하거나을 종료하거나을 (를) 사용하여 포 그라운드에서 계속할 수 fg있습니다. bash 맨 페이지 섹션을 참조하십시오 JOB CONTROL.
ott--

답변:


25

SIGINT가 수신 될 때 호출하려는 서브 루틴을 작성하여이를 수행하고 실행해야합니다 trap 'subroutinename' INT.

예:

#!/bin/bash

int_handler()
{
    echo "Interrupted."
    # Kill the parent process of the script.
    kill $PPID
    exit 1
}
trap 'int_handler' INT

while true; do
    sleep 1
    echo "I'm still alive!"
done

# We never reach this part.
exit 0

2
EXIT스크립트가 종료 된 방식에 관계없이 스크립트가 종료 될 때마다 실행할 무언가가있는 경우 에도 트랩 할 수 있습니다 . ( KILL물론 예외)
Blrfl

감사합니다! 그러나 'sleep'이 종료되면 트랩 루틴이 실행되는 동안 쉘은 다음 명령을 계속 실행할 수 있습니다.
kolypto

불가능해서는 안됩니다. 작업을 병렬로 수행하지 않습니다.
Kvisle
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.