bash:取消“trap handler DEBUG”的执行

bash:取消“trap handler DEBUG”的执行

我可以通过执行以下操作来在命令myHandler()之前执行一个函数:bash

function myHandler() {
   ...
}
trap 'myHandler' DEBUG

但是,我希望能够BASH_COMMAND根据运行时条件继续或中止即将执行的操作myHandler,如下所示:

function myHandler() {
   if ! myCondition ; then
      abort the execution of BASH_COMMAND right here
   fi
   # Proceed with the execution of BASH_COMMAND
}

这可能吗?

答案1

您可以,只需启用extdebug并返回一个非零代码(extdebug参见选项说明) 从myHandler

$ function myHandler() {
  if [[ $SKIP = "true" ]]; then return 1; fi;
  echo 'myHandler execute'
}
$ trap 'myHandler' DEBUG
$ shopt -s extdebug
$ echo 1
myHandler execute
1
$ SKIP=true
myHandler execute
$ echo 1

相关内容