내 문제는 내가 이러한 작업을 수행하는 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
내 질문은 "???" 이상을 대체하려면 무엇을 사용해야 하는가입니다.