web-dev-qa-db-ja.com

bash:「トラップハンドラーDEBUG」の実行をキャンセルします

次の手順を実行すると、bashコマンドの前に関数myHandler()を実行できます。

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

ただし、次のように、myHandler内の実行時条件に基づいて、差し迫ったBASH_COMMANDの実行を続行または中止できるようにしたいと思います。

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

これは可能ですか?

5
Harry

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
4
cuonglm