BASH - stderr 메시지를 트랩에 전달할 변수로 가져옵니다.

BASH - stderr 메시지를 트랩에 전달할 변수로 가져옵니다.

내 문제는 내가 이러한 작업을 수행하는 Ubuntu 20.04에 있습니다.

현재 $BASH_COMMAND, $LINENO 및 $?와 같은 일부 상태 정보를 디버그 트랩에 전달합니다. 또한 명령에 의해 생성된 표준 오류 메시지를 트랩 함수에 전달하고 싶습니다. $? 현재 명령어가 아직 실행되지 않았기 때문에 현재 명령어가 아닌 이전 명령어의 반환 코드가 되므로 유효하지 않을 수 있습니다. $? 그리고 명령을 실행한 후에는 stderr 메시지가 ERR 트랩 기능으로 전달되어야 할 것입니다. 다음 링크는 이 질문에 대한 사고 과정을 시작합니다. 실행되는 모든 명령에 대해 2>를 일반적인 방식으로 변수로 리디렉션할 수 있습니까?

실행된 명령에서 오류 메시지를 캡처하는 방법은 무엇입니까?

그렇다면 마지막 stderr 메시지가 포함된 변수를 ERR 트랩 함수에 전달할 수도 있습니다. 안타깝게도 마지막 명령에 대해 명령, 줄 번호, 반환 코드 및 표준 오류 메시지를 모두 한 곳에서 사용하여 트랩 함수를 호출할 수 있는 방식으로 변수에 대한 리디렉션을 수행하는 방법을 모르겠습니다.

어쩌면 트랩 기능이 시작된 후에 읽을 수 있는 고유한 이름의 추가되지 않은 파일로 stderr를 리디렉션하기 위해 서브셸, 소스, 함수 이름 및 줄 번호(및 명령도 가능)를 사용하는 방법이 있을 수 있습니다. 이 경우 디스크(SSD 또는 RUST)에 쓰는 것보다 이러한 파일을 메모리에 쓰고 자동으로 지우는 것이 좋습니다. 이러한 파일을 생성하고 삭제하면 상당한 오버헤드가 발생합니다.

위의 모든 단점을 고려할 때, bash 특수 변수 추가를 제어하는 ​​사람들이 $%와 관련된 새로운 변수를 고려할 것이라고 생각하십니까? 어쩌면 ERR 트랩에 전달하기 위해 stderr 메시지를 저장하는 것이 더 나은 대답이 될까요? 이미 그러한 변수가 있을 수도 있지만 아직 이름을 찾지 못했습니다.

감사해요

디버깅 트랩의 뼈대

    fxTrapDEBUG()
    {
        set -x
        local lBashCommand="$1"
        local lLineNo="$2"
        set +x
    }

    trap 'fxTrapDEBUG "$BASH_COMMAND" "$LINENO"' DEBUG

ERR(오류) 트랩의 뼈대

    fxTrapERROR()
    {
        set -x
        local lBashCommand="$1"
        local lLineNo="$2"
        local lReturnCode="$3"
        local lStdErrMsg="$4"
        set +x
    }

    trap 'fxTrapERROR "$BASH_COMMAND" "$LINENO" "$?" "???"' ERR

내 질문은 "???" 이상을 대체하려면 무엇을 사용해야 하는가입니다.

관련 정보