trap 명령 사용 설명

2773 단어
trap 명령 사용 하기
trap 명령 은 지정 한 신 호 를 캡 처 하고 미리 정 의 된 명령 을 수행 하 는 데 사 용 됩 니 다.기본 적 인 문법 은 trap 'command' signal 에서 signal 은 캡 처 할 신호 이 고 command 는 지정 한 신 호 를 캡 처 한 후에 실행 할 명령 입 니 다.kill – l 명령 으로 시스템 에서 사용 할 수 있 는 모든 신호 이름 을 볼 수 있 습 니 다. 신 호 를 캡 처 한 후 실행 하 는 명령 은 하나 이상 의 합 법 적 인 셸 문 구 를 사용 할 수도 있 고 함수 이름 일 수도 있 습 니 다.셸 스 크 립 트 가 실 행 될 때 세 개의 이른바 '위조 신호' 가 발생 합 니 다. ('위조 신호' 라 고 부 르 는 이 유 는 이 세 개의 신 호 는 셸 에서 발생 하고 다른 신 호 는 운영 체제 에서 발생 하기 때 문 입 니 다) trap 명령 을 사용 하여 이 세 개의 '위조 신호' 를 포착 하고 관련 정 보 를 출력 하 는 것 이 디 버 깅 에 매우 도움 이 됩 니 다.
표 1. 셸 의사 신호
신호 이름
언제
EXIT
한 함수 에서 종료 되 거나 전체 스 크 립 트 가 실 행 됩 니 다.
ERR
명령 이 0 이 아 닌 상태 로 되 돌아 갈 때 (명령 이 실행 되 지 않 았 음 을 의미 합 니 다)
DEBUG
스 크 립 트 의 모든 명령 이 실행 되 기 전에
EXIT 신 호 를 캡 처 하여 셸 스 크 립 트 에서 실행 을 중단 하거나 함수 에서 종료 할 때 추적 하고 자 하 는 변수의 값 을 출력 하여 스 크 립 트 의 실행 상태 와 오류 원인 을 판단 할 수 있 습 니 다. 사용 방법 은 trap 'command' EXIT 또는 trap 'command' 0 입 니 다.
ERR 신 호 를 캡 처 함으로써 저 희 는 성공 하지 못 한 명령 이나 함 수 를 편리 하 게 추적 하고 관련 디 버 깅 정 보 를 출력 할 수 있 습 니 다. 다음은 ERR 신 호 를 캡 처 하 는 예제 프로그램 입 니 다. 그 중에서 $LINENO 는 셸 의 내 장 된 변수 로 셸 스 크 립 트 의 현재 줄 번 호 를 대표 합 니 다.
$ cat -n exp1.sh
1 ERRTRAP()
2 {
3 echo "[LINE:$1] Error: Command or function exited with status $?"
4 }
5 foo()
6 {
7 return 1;
8 }
9 trap 'ERRTRAP $LINENO' ERR
10 abc
11 foo

그 출력 결 과 는 다음 과 같다.
$ sh exp1.sh
exp1.sh: line 10: abc: command not found
[LINE:10] Error: Command or function exited with status 127
[LINE:11] Error: Command or function exited with status 1

디 버 깅 과정 에서 일부 변수의 값 을 추적 하기 위해 서 는 셸 스 크 립 트 의 많은 곳 에 같은 echo 문 구 를 삽입 하여 관련 변수의 값 을 인쇄 해 야 합 니 다. 이런 방법 은 번 거 롭 고 서 툴 러 보 입 니 다.그리고 DEBUG 신 호 를 캡 처 함으로써 우 리 는 하나의 trap 문구 만 있 으 면 관련 변수 에 대한 전체 추적 을 완성 할 수 있 습 니 다.
다음은 DEBUG 신 호 를 캡 처 하여 변 수 를 추적 하 는 예제 프로그램 입 니 다.
$ cat –n exp2.sh
1 #!/bin/bash
2 trap 'echo “before execute line:$LINENO, a=$a,b=$b,c=$c”' DEBUG
3 a=1
4 if [ "$a" -eq 1 ]
5 then
6 b=2
7 else
8 b=1
9 fi
10 c=3
11 echo "end"

그 출력 결 과 는 다음 과 같다.
$ sh exp2.sh
before execute line:3, a=,b=,c=
before execute line:4, a=1,b=,c=
before execute line:6, a=1,b=,c=
before execute line:10, a=1,b=2,c=
before execute line:11, a=1,b=2,c=3
end

실행 결과 에서 명령 을 실행 할 때마다 관련 변수의 값 변 화 를 뚜렷하게 볼 수 있다.또한 실행 결과 에 인쇄 된 줄 번 호 를 분석 하면 전체 스 크 립 트 의 실행 궤적 을 볼 수 있 고 어떤 조건 이 실행 되 었 는 지, 어떤 조건 이 실행 되 지 않 았 는 지 판단 할 수 있 습 니 다.

좋은 웹페이지 즐겨찾기