默认函数参数(手动发出 bash 伪信号)

默认函数参数(手动发出 bash 伪信号)

我正在寻找一种解决方案,该解决方案将自动允许我在特定情况下调用具有特定参数的函数。
下面是具体场景:

当发生错误时,我可以像这样设置错误处理程序:

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任何具有非零退出状态的命令都会触发陷阱。不需要进一步的明确操作来使其运行。

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

相关内容