bash 스크립트의 경우 ‘Ctrl + c’를 트랩하십시오. 그러나이 스크립트에서는 프로세스가 열려 있지 않습니다. 할 때 내 스크립트도

bash 스크립트에서 대화 형 프로그램을 만들려고했습니다.

my_program

그리고 ‘Ctrl + c’로 닫을 수 있기를 바랍니다. 그러나 내가 할 때 내 스크립트도 닫힙니다.

나도 알아

trap '' 2
my_program
trap 2

그러나이 경우 my_programCtrl + c로 닫을 수 없습니다 .

프로그램에서 Ctrl + c를 허용하지만 실행중인 스크립트를 닫지 않는 방법을 알고 있습니까?

편집 : 예 추가

#!/bin/bash
my_program
my_program2

내가 가까이하려면 Ctrl + C를 사용하는 경우 my_program, my_program2전체 스크립트가 종료되기 때문에 실행되지 않습니다.



답변

당신은 사용해야 trap true 2또는 trap : 2대신 trap '' 2. 그것이 bash 쉘의 “help trap”에 관한 것입니다.

ARG가 널 (null) 문자열 인 경우 각 SIGNAL_SPEC은 쉘 과 호출 한 명령에 의해 무시됩니다 .

예:

$ cat /tmp/test
#! /bin/sh
trap : INT
cat
echo first cat killed
cat
echo second cat killed
echo done
$ /tmp/test
   <press control-C>
^Cfirst cat killed
   <press control-C>
^Csecond cat killed
done

답변

trap 명령 -을 조치 인수로 제공하여 트랩을 기본값으로 재설정 할 수 있습니다 . 당신은이 작업을 수행하면 서브 쉘 , 그것은 부모 쉘의 함정에 영향을 미치지 않습니다. 스크립트에서 Ctrl-C로 인터럽트 할 수 있어야하는 각 명령에 대해이를 수행 할 수 있습니다.

#!/bin/bash
# make the shell (and its children) ignore SIGINT
trap '' INT
.
.
.
# but this child won't ignore SIGINT
(trap - INT; my_program)
# the rest of the script is still ignoring SIGINT
.
.
.

답변

Crtl+ 를 사용 하면 프로그램 C중단 됩니다 ( ” kill ” 프로그램 ).
당신이 찾고있는 것은 아마도 프로그램 을 일시 중지시키는 것입니다 ( ” pause “it). 이를 위해 Crtl+ 를 사용할 수 있습니다 Z.
프로그램이 일시 중지되면을 사용하여 볼 수 있습니다 jobs. 예를 들면 다음
[1]+ Stopped ./foobar
과 같습니다. 작업 # 1은 하나만 있지만 둘 이상의 작업이있을 수 있습니다. 각 작업에는 고유 한 번호가 있습니다.
여러 명령 (예 bg: fg및) 을 사용하여 일시 중단 된 프로세스를 제어 할 수 있습니다 kill.
bg %1에서 작업 1을 다시 시작 B ACK g 라운드
fg %1의지 재시작의 작업 1 F의 광석g의 라운드는
kill %1작업 # 1 죽일 것이다
당신이 사용할 수있는 주 bgfg당신이 하나의 활성 작업이있는 경우 인수없이합니다.