집계 스크립트의 아래 첨자에 대한 상태 코드

집계 스크립트의 아래 첨자에 대한 상태 코드

나는 이와 같은 bash 스크립트를 가지고 있습니다

#!/bin/bash

do-this parm someotherparam
do-something-else $varz $(commands)
and-also-do-this -something
finally-do-something-different -yes

위의 모든 개별 명령이 0을 반환하는 경우 이 스크립트가 종료 상태 0을 반환하도록 하고 싶습니다. 단일 명령이 0이 아닌 값을 반환하면 0이 아닌 값을 반환하고 싶습니다. 0이 아닌 한 0이 아닌 값이 무엇인지 상관하지 않습니다.

분명히 각 줄 이후의 상태를 확인하면 장황하더라도 쉽게 목표를 달성할 수 있습니다. 나는 bash를 처음 접했기 때문에 이것을 작성하는 관용적인 방법이 있는지 궁금했습니다.

참고: 종료 상태에 관계없이 모든 명령이 실행되기를 원합니다. 그렇지 않으면 다음과 같습니다.이것작동합니다

답변1

#!/bin/bash

err=0

do-this parm someotherparam             ; (( err |= $? ))
do-something-else $varz $(commands)     ; (( err |= $? ))
and-also-do-this -something             ; (( err |= $? ))
finally-do-something-different -yes     ; (( err |= $? ))

이는 변수를 0으로 초기화한 다음 err각 명령 후에 (비트별 OR) err로 설정합니다. 0이 아닌 종료 상태로 명령이 종료되면 값은 0이 아닌 숫자로 설정되고 스크립트가 끝날 때까지 0이 아닌 상태로 유지됩니다.$err | $?err

원하는 경우 exit "$err"스크립트 끝에서 .

동일한 결과를 얻는 덜 수동적인 방법:

err=0
trap '(( err |= $? ))' ERR

# (rest of original script)

err이는 명령이 0이 아닌 종료 상태로 종료될 때마다 위와 동일한 방식으로 오류 트랩을 설정합니다. 트랩은 스크립트를 종료하는 errexit쉘 옵션( ) 과 set -e동일한 조건에서 실행됩니다 . 작업을 단순하게 유지하기 위해 err=1필요에 따라 트랩을 설정할 수 있습니다 .

코드 블록 이후 트랩을 취소하려면 다음을 사용하십시오.

trap - ERR

관련 정보