Bash 스크립트에서 대화형 프로그램을 만들려고 합니다.
my_program
"Ctrl+c"로 닫고 싶습니다. 하지만 이렇게 하면 스크립트도 닫힙니다.
알아요.
trap '' 2
my_program
trap 2
my_program
하지만 이 경우에는 Ctrl+c로 닫을 수 없습니다 .
프로그램에서 Ctrl+C를 허용하지만 이를 실행하는 스크립트를 닫지 않는 방법을 알고 계십니까?
편집: 예를 추가했습니다.
#!/bin/bash
my_program
my_program2
my_program
Ctrl+ c 를 사용하여 닫으면 my_program2
전체 스크립트가 종료되므로 실행되지 않습니다.
답변1
대신 trap true 2
or 를 사용해야 합니다 . 이것은 bash 쉘의 "도움말 트랩"에 나와 있습니다.trap : 2
trap '' 2
ARG가 빈 문자열인 경우 쉘은 각 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
답변2
-
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
.
.
.
답변3
Crtl+ 를 C사용 하면방해하다프로그램("죽이다"it).
당신이 찾고 있는 것은정지시키다귀하의 프로그램("정지시키다" it). 이렇게 하려면 Crtl+ 를 사용할 수 있습니다 Z.
프로그램이 일시 중지되면 다음 을 jobs
사용 볼 수 있습니다 . 정지된 프로세스를 제어하는 데 사용할 수 있는 명령이 많이 있으며 작업 #1을 다시 시작합니다.
[1]+ Stopped ./foobar
bg
fg
kill
bg %1
비확인하다G라운드가
fg %1
작업 #1을 다시 시작합니다.에프광석G라운드는
kill %1
작업 #1을 종료합니다. 활성 작업이 하나만 있는 경우 및 매개변수 없이
사용할 수 있습니다 .bg
fg