일부 파일 처리를 수행하기 위해 Perl 스크립트를 호출하는 쉘 스크립트가 있습니다. Perl 스크립트는 0 또는 1의 값으로 종료됩니다. set -e
Perl 스크립트가 값 1로 종료되면 스크립트를 중단하기 위해 스크립트 시작 부분에 Unix 명령이 있습니다. Unix에 Perl 스크립트가 값으로 종료되면 스크립트가 중단되기 전에 명령을 실행하는 명령이 있는지 궁금합니다. 본질적으로 나는 스크립트가 Perl 스크립트가 성공적으로 실행되었는지 여부를 알리는 이메일을 나에게 보내길 원합니다. 내 코드는 이제 다음과 같습니다.
#!/bin/bash
set -e
function email_success {
#Some code for the email
}
function email_fail {
#Some code for the email
}
usr/bin/perl perlscript.pl
if [$? -eq 0]; then
email_success
else
email_fail
fi
#More commands to be executed if its successful
답변1
set -e
실패한 분기 에 종료를 사용하고 추가하지 마십시오 if
. 스크립트의 나머지 부분에 해당 동작이 포함되도록 하려면 set -e
이메일 호출 후에 추가하세요.
답변2
사용set -e
당신은 쓸 수 있습니다:
#!/bin/bash
set -e
# function email_success {...}
# function email_fail { ... }
if /usr/bin/perl perlscript.pl; then
email_success
else
email_fail
exit 1
fi
#More commands to be executed if its successful
설명하다:
배쉬 참조 매뉴얼설명하다:
-e
파이프라인(단일 단순 명령으로 구성될 수 있음)이 0이 아닌 상태를 반환하는 경우 즉시 종료하십시오. 껍데기종료하지 마세요실패한 명령이 명령문 테스트의 일부인 경우if
.
if 명령의 구문은 다음과 같습니다.
if test-commands; then consequent-commands; [elif more-test-commands; then more-consequents;] [else alternate-consequents;] fi
테스트 명령 목록을 실행하고 반환 상태가 0이면 후속 명령 목록을 실행합니다. "else alter-consequents"가 있고 마지막 if 또는 elif 절의 마지막 명령에 0이 아닌 종료 상태가 있는 경우 대체 결과가 실행됩니다.