code

Bash 스크립트를 종료하기 전에 명령을 실행하는 방법

starcafe 2023. 4. 13. 21:00
반응형

Bash 스크립트를 종료하기 전에 명령을 실행하는 방법

Bash 스크립트에 다음 항목이 있는 경우set -e스크립트 내의 명령어로 오류가 반환됩니다.스크립트가 종료되기 전에 청소를 하려면 어떻게 해야 합니까?

예를 들어 다음과 같습니다.

#!/bin/bash
set -e
mkdir /tmp/foo
# ... do stuff ...
rm -r /tmp/foo

어떻게 해야 할까요?/tmp/foo의 명령어 중 하나가 삭제되어도... do stuff ...실패했을까요?

다음은 트랩을 사용하는 예입니다.

#!/bin/bash -e

function cleanup {
  echo "Removing /tmp/foo"
  rm  -r /tmp/foo
}

trap cleanup EXIT
mkdir /tmp/foo
asdffdsa #Fails

출력:

dbrown@luxury:~ $ sh traptest
t: line 9: asdffdsa: command not found
Removing /tmp/foo
dbrown@luxury:~ $

asdffdsa 라인에 장애가 발생했지만 청소는 여전히 수행되었습니다.

에서bashmanpage(빌트인 관련):

trap [ - lp ][ sigspec ... ]
명령어 arg는 셸이 신호를 수신할 때 읽고 실행합니다.

아논의 대답에 나타난 것처럼, 전화하세요.trapERR에서 원하는 핸들러를 셋업하기 위해 스크립트의 초기 단계에서 사용합니다.

shdevguydavid의 답변 버전입니다.

#!/bin/sh
set -e
cleanup() {
  echo "Removing /tmp/foo"
  rm  -r /tmp/foo
}
trap cleanup EXIT
mkdir /tmp/foo
asdffdsa #Fails

ref: 셸스크립트

에 대한 참조:set:

-e

간단한 명령어(섹션 3.2.1 Simple Commands 참조)가 0이 아닌 상태로 종료된 경우 즉시 종료합니다.단, 실패한 명령어가 will 또는 while loop의 일부, if 문의 일부, & 또는 | 목록의 일부, 명령어 반환 상태가 !를 사용하여 반전되는 경우는 제외합니다.ERR 트랩이 설정되어 있는 경우 셸이 종료되기 전에 실행됩니다.

(내 것을 강조하라)

그게 너한테 중요한지 그게 전인지 후인지 모르겠어.

"trap"으로 닫은 후 바로 실행되도록 스크립트를 설정한 후 단말기를 닫을 수 있습니다.

예:

    trap  ./val.sh EXIT  #set command you want to run after close terminal 
    kill -9 $PPID        #kill current terminal

언급URL : https://stackoverflow.com/questions/2129923/how-to-run-a-command-before-a-bash-script-exits

반응형