한 스크립트가 실패하더라도 스크립트 내에서 여러 스크립트를 실행하려면 어떻게해야합니까?


0

나는 다른 스크립트를 실행하는 간단한 bash 스크립트를 가지고있다 ...

#/bin/bash
…
./update_artifact1.sh $ARTIFACT_VERSION
./update_artifact2.sh $ARTIFACT_VERSION
./update_artifact3.sh $ARTIFACT_VERSION

문제는 첫 번째 명령 (또는 두 번째)이 오류와 함께 종료되면 후속 명령이 실행되지 않는다는 것입니다. 세 명령을 모두 실행하고 각 명령의 종료 상태를 저장 한 다음이 세 명령이 모두 성공적으로 실행되면 성공적인 종료 상태를 반환하는 방법이 있습니까? 스크립트는 동시에 실행될 필요가 없습니다.


2
당신이 보여주는 것은 주요 스크립트가 죽어야한다는 것을 의미하지는 않습니다. "..."뒤에 무엇이 있습니까?
glenn jackman

"./update_artifact1.sh $ ARTIFACT_VERSION"명령이 실패하면 다른 두 명령 ( "./update_artifact2.sh $ ARTIFACT_VERSION"및 "./update_artifact3.sh $ ARTIFACT_VERSION")이 실행되지 않습니다. 이해하니?
Dave

3
네 저도 그렇습니다. 하지만 시도하면 cd /unknown_dir; echo okcd가 실패하더라도 echo 명령이 실행되었습니다. 스크립트에서 두 번째 및 세 번째 명령이 실패합니까? 있니? set -e 켜져? 두 번째 및 세 번째 명령은 첫 번째 명령에 의존합니까? 오류 출력이 있습니까? 더 많은 정보를 제공해야합니다.
glenn jackman

답변:


0

이 방법으로 스크립트를 약간 수정할 수 있습니다.

#!/bin/bash
…
./update_artifact1.sh $ARTIFACT_VERSION
exit_state_1=$?
./update_artifact2.sh $ARTIFACT_VERSION
exit_state_2=$?
./update_artifact3.sh $ARTIFACT_VERSION
exit_state_3=$?
exit_state_all=$[ $exit_state_1 &&  $exit_state_2 && $exit_state_3 ]
exit $exit_state_all

노트 :

  • 각 명령은 다음과 같은 종료 코드를 반환합니다. bash ~에 저장하다 $?. 그것은 0 오류가 없으면 다른 번호가 표시됩니다.
    모든 라인 이후의 값 $? 변수에 저장해야하기 때문에 업데이트됩니다 (이 경우에는 exit_state_1 ... exit_state_n ).
    결국 괜찮 으면 0으로 오류 코드 만 반환하고 우리는 그것을 깨닫게됩니다. $[ $a || $b || $c ].
    유의 사항 $[ 0|| 0 || 0 ] 그 사이에 0입니다. $[ $a || $b || $c ] 에 적어도 하나는 $a,$b,$c 같지 않음 0 1을 반환합니다.
  • 그것은 중요합니다. ! 첫 줄에 글을 써야 할 때 #!/bin/bash 말하자면, 시스템에서 실행되어야하는 스크립트입니다. bash 껍질.
    흥미로운 내용은 오두막 이리.
  • 덧글에 언급 한 바와 같이 set -e 스크립트가 어딘가에서 스크립트를 실행하기 전에 스크립트는 첫 번째 오류에서 다른 행을 처리하지 않고 중단되고 오류 코드 (실행 된 마지막 명령 중 하나)를 반환합니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.