이전 명령이 0이 아닌 값을 반환한 후 스크립트가 중단되기 전에 하나 이상의 명령을 실행하도록 하려면 어떻게 해야 합니까?

이전 명령이 0이 아닌 값을 반환한 후 스크립트가 중단되기 전에 하나 이상의 명령을 실행하도록 하려면 어떻게 해야 합니까?

일부 파일 처리를 수행하기 위해 Perl 스크립트를 호출하는 쉘 스크립트가 있습니다. Perl 스크립트는 0 또는 1의 값으로 종료됩니다. set -ePerl 스크립트가 값 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 명령의 구문은 다음과 같습니다.

if test-commands; then
  consequent-commands;
[elif more-test-commands; then
  more-consequents;]
[else alternate-consequents;]
  fi

테스트 명령 목록을 실행하고 반환 상태가 0이면 후속 명령 목록을 실행합니다. "else alter-consequents"가 있고 마지막 if 또는 elif 절의 마지막 명령에 0이 아닌 종료 상태가 있는 경우 대체 결과가 실행됩니다.

또한보십시오:비공식 Bash 엄격 모드 사용(디버깅을 좋아하지 않는 한)

관련 정보