저는 특정 상황에서 특정 매개변수를 사용하여 함수를 자동으로 호출할 수 있게 해주는 솔루션을 찾고 있습니다.
다음은 구체적인 시나리오입니다.
오류가 발생하면 다음과 같이 오류 처리기를 설정할 수 있습니다.
function _trap_err () {
echo "An error occurred in "$1":"$2" on "$3":"$4".
}
필요한 디버깅 데이터를 자동으로 수집하도록 트랩을 설정할 수 있습니다.적절한 실행 순간에.
trap '_trap_err "$BASH_SOURCE" "$BASH_LINENO" "$FUNCNAME" "$BASH_COMMAND" ' ERR
AFAIK, 이것은 bash가 오류를 감지하고 신호를 보내는 경우에만 작동합니다.
예를 들어 함수 인수를 확인할 때 검사가 실패할 때 오류를 수동으로 알리도록 이 동작을 확장하고 싶습니다.
# Usage: myfunc <requiredarg>
function myfunc () {
[[ $# != 1 ]] && emit_err_signal
}
해당 오류를 수동으로 알리는 방법이 있는 경우 해당 디버깅 매개변수는 실행 중 적절한 시점에 자동으로 수집되어 의미 있는 디버깅 정보를 제공할 수 있습니다.
또 다른 접근 방식은 오류 메시지(각 검사에서 하드코딩해야 함)만 표시하고 오류가 발생한 위치는 표시하지 않는 것입니다.
어떤 아이디어가 있나요?
편집하다
이것이 내 .bashrc 파일용임을 지정해야 합니다. 파일이 종료되는 것을 원하지 않고 디버깅 정보만 원합니다. 이에 대한 함정은 약간 과잉일 수 있습니다. 다음 솔루션이 효과가 있을 수 있다고 생각합니다.
function _debug () {
local _message=${1:-""}
printf "\e[1;32m[BASHRC] DEBUG: %-20s - %s\e[0m\n" "$BASH_SOURCE:$BASH_LINENO" "$_message"
}
_debug "Testing debug message."
> [BASHRC] DEBUG: .bashrc.d/bashrc:18 - Testing debug message.
답변1
종료 코드를 사용할 수 있습니다.
set -e
# Usage: myfunc <requiredarg>
ARGS_NUM_ERROR=50
function myfunc () {
[[ $# != 1 ]] && exit $ARGS_NUM_ERROR
}
ARGS_NUM_ERROR
그런 다음 적절한 처리를 통해 스크립트를 캡처 할 수 있습니다 .
답변2
ERR
종료 상태가 0이 아닌 모든 명령은 트랩을 트리거합니다. 이를 실행하기 위해 더 이상 명시적인 조치가 필요하지 않습니다.
function _trap_err () {
echo "An error occurred in $1:$2 on $3:$4."
}
trap '_trap_err "$BASH_SOURCE" "$BASH_LINENO" "$FUNCNAME" "$BASH_COMMAND" ' ERR
foo () {
false
}
foo
echo "Some commands that succeed"
foo