bash: Cancelando a execução de 'trap handler DEBUG'

4

Eu posso obter uma função myHandler() para executar antes de um comando bash fazendo o seguinte:

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

No entanto, gostaria de poder prosseguir ou abortar a execução do iminente BASH_COMMAND com base em uma condição de tempo de execução em myHandler da seguinte forma:

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

Isso é possível?

    
por Harry 26.05.2016 / 14:35

1 resposta

3

Você pode, apenas ativar extdebug e retornar um código diferente de zero ( Veja a descrição da opção extdebug ) em 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
    
por 26.05.2016 / 14:46