[unix] 로컬로 종료 코드를 캡처하는 방법은 무엇입니까?

내 프로젝트에는 다음과 같은 스 니펫이 있습니다.

local output="$(bash "${1##*/}")"
echo "$?"

이로 인해 항상 0으로 인쇄 local되지만 변수를 제거 local하면 $?변수가 올바르게 작동합니다. 서브 쉘에서 종료 코드를 가정합니다.

내 질문은 :이 변수를 로컬로 유지하면서 종료 값을 캡처하는 방법은 무엇입니까?



답변

#!/bin/bash
thing() {
   local foo=$(asjkdh) ret="$?"
   echo "$ret"
}

127“명령을 찾을 수 없음”에 대한 올바른 오류 코드 인가 에코됩니다 .

local둘 이상의 변수를 정의 하는 데 사용할 수 있습니다 . 따라서 로컬 변수 RET를 작성 하여 하위 쉘의 종료 코드를 캡처하여 local성공하고 $?0으로 설정 합니다.


답변

지역 변수를 지정하기 전에 선언하십시오 :

thing() {
  local output
  output="$(bash "${1##*/}")"
  echo "$?"
}

내 의견으로는 이것은 추가 RET변수를 설정하는 것보다 더 읽기 쉽습니다. YMMV는 있지만 예상대로 작동합니다.


답변