Bash 스크립트는 Ctrl+C로 종료되지 않습니다.

Bash 스크립트는 Ctrl+C로 종료되지 않습니다.

Ctrl내 스크립트는 + 키로 종료될 수 없습니다 C. 이것은 실수입니다.

Ctrl+로 종료 되도록 스크립트를 수정하는 방법을 설명해주세요 C.

#!/bin/bash

while true; do
  paplay /usr/share/sounds/phone.wav
done

답변1

상위 쉘에서 SIGINT를 포착하고 쉘을 종료하면 paplay도 닫힙니다.

trap exit SIGINT;
while true; do paplay  /usr/share/sounds/phone.wav ; done

paplayINT 신호를 차단하고 이에 영향을 미치면 상위 쉘이 기본 핸들러를 실행하지 못하게 되는 것처럼 보입니다 .

상위 셸에 핸들러를 설치하고 거기에서 핸들러를 재설정하고 신호를 다시 발생시키면 더 나은 방법으로 문제를 해결할 수 있습니다.

trap 'trap - SIGINT; kill -SIGINT $$' SIGINT; 
while :; do paplay  /usr/share/sounds/linuxmint-login.wav ; done 

(이 exit방법을 사용하면 실행 프로그램 프로세스는 하위 프로세스가 자동으로 종료된 것으로 생각하지만, 두 번째 방법을 사용하면 스크립트가 종료된 것처럼 보입니다 SIGINT.)

답변2

문제는 실제로 에 관한 것입니다 paplay. 신호를 차단할 수 있습니까? 또는 (예:아치스 위키) 아마도 너무 바쁠 수도 있습니다.

sleep 1루프에 를 넣어 스크립트를 더 쉽게 중지할 수 있습니다.

관련 정보