도우미 기능이 있습니다.
function error_exit
{
/opt/aws/bin/cfn-signal ...
exit 1
}
이 도우미 함수는 오류를 알리는 데 사용됩니다. 사용 예는 다음과 같습니다.
/opt/aws/bin/cfn-init -s .. || error_exit 'Failed to run cfn-init'
이 cfn-init
명령에는 문제와 관련이 없는 많은 매개변수가 필요합니다. 명령이 null이 아닌 값을 반환하고 오류 출력에 오류 메시지가 나타날 수 있는 경우 오류 메시지를 가져와 error_exit
메서드에 매개 변수로 포함하고 싶습니다 . 가능합니까? 그렇지 않다면 소스 오류 메시지를 얻기 위해 bash에서 도우미 메서드를 어떻게 구현하겠습니까?
답변1
오류 출력을 파일로 리디렉션한 다음 해당 출력을 검색할 수 있습니다.
trap "rm -f /tmp/cfn-error.txt" 0 1 2 3 15
/opt/aws/bin/cfn-init -s ... 2>/tmp/cfn-error.txt ||
error_exit $(</tmp/cfn-error.txt)
항상 어수선한 부분을 정리해야 하므로 생성한 임시 파일을 모두 삭제하는 것을 잊지 마세요.
답변2
리디렉션을 통해 이 작업을 수행할 수도 있습니다.
# run_cmd 'error message' cmd -foo "${params[@]}"
run_cmd() {
local e r m=$1
shift
exec 6>&1
e=$("$@" 2>&1 >&6)
r=$?
exec 6>&-
((r)) || return 0
error_exit "$m" "$e"
}
따라서 다음을 사용합니다.
run_cmd 'Failed to run cfn-init' /opt/aws/bin/cfn-init -s ..
e=$("$@" 2>&1 >&6) 행은 먼저 stderr를 stdout으로 지시하며 $(..) 컨텍스트에서 우리가 캡처하는 출력입니다. 그런 다음 stdout은 함수를 시작했을 때 원래 있었던 위치로 이동됩니다.
물론 error_exit를 추가로 종료 상태를 가져오고 다음과 같이 호출할 수 있습니다: error_exit "$m" "$r" "$e"