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 라인에 장애가 발생했지만 청소는 여전히 수행되었습니다.
에서bash
manpage(빌트인 관련):
trap [ - lp ][ sigspec ... ]
명령어 arg는 셸이 신호를 수신할 때 읽고 실행합니다.
아논의 대답에 나타난 것처럼, 전화하세요.trap
ERR에서 원하는 핸들러를 셋업하기 위해 스크립트의 초기 단계에서 사용합니다.
sh
devguydavid의 답변 버전입니다.
#!/bin/sh
set -e
cleanup() {
echo "Removing /tmp/foo"
rm -r /tmp/foo
}
trap cleanup EXIT
mkdir /tmp/foo
asdffdsa #Fails
에 대한 참조: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
'code' 카테고리의 다른 글
Objective-C와 Cocoa를 작성할 때 사용하는 베스트 프랙티스는 무엇입니까? (0) | 2023.04.18 |
---|---|
SQL Server에서 쿼리 시간 초과 강제 적용 (0) | 2023.04.18 |
Bash에서 난수를 생성하는 방법은 무엇입니까? (0) | 2023.04.13 |
로그 축 표시 (0) | 2023.04.13 |
Bash 명령에서 텍스트파일 내 검색 및 치환 (0) | 2023.04.13 |