명령을 실행하는 방법과 실패하면 다른 명령을 실행하고 1을 반환합니까?

명령을 실행하는 방법과 실패하면 다른 명령을 실행하고 1을 반환합니까?

나는 다른 언어에서 이 스타일에 익숙합니다.

do_something || (log_error; return 1) # do something, and if that fails, log the error and then return 1 no matter what, even if the logging fails.

하지만 bash에서는 이에 상응하는 항목을 찾을 수 없는 것 같습니다. 문제는 괄호가 자체 범위를 가진 함수처럼 작동하고 return 1이 예상된 동작을 갖지 않는다는 것입니다.

이것이 내가 지금까지 가지고 있는 것이지만 완벽하지는 않습니다.

! do_something && log_error && return 1

이것의 문제는 ! 혼란스럽고 반환 1은 로깅 성공 여부에 따라 달라집니다.

이것은 더 좋지만 더 장황합니다.

do_something || (log_error; return 1) || return 1

이견있는 사람?

답변1

중괄호를 사용하십시오.

 do_something || { log_error; return 1;}

답변2

마지막 명령 실행의 종료 상태가 변수에 저장됩니다 $?. 따라서 다음과 같은 작업을 수행할 수 있습니다.

do something
if [[ $? > 0 ]]; then 
   do log_error; exit 1; 
fi

가독성 측면에서 마음에 듭니다. 그러나 귀하의 제품은 완벽하게 좋습니다. &&다음으로 교체하면 됩니다 ;.

! do_something && log_error ; return 1

&&"이전 명령이 성공적으로 종료된 경우에만 다음 명령을 실행합니다"를 의미하고 ;"다음 명령을 실행합니다"를 의미합니다.

관련 정보