#!/bin/bash function on_exit { code=${1:-0} # exec 3>&1 1>&2 2>&3 # exec 1>&- 3>&- 2>&- # exec 2> >(tee /dev/stderr) trap - ERR TERM INT EXIT # exec 2>&- # exec 1> >(tee -ap /dev/stdout) 2>&- 3> >(tee -ap /dev/stderr) # exec 2>&- 3>&- # echo CLOSE OPEN PIPE suite count=$(wc -c stderr | cut -d' ' -f1) content=$(head -qc$count stderr) >&4 echo "DETECTED0: [$content]" >&4 echo ON_EXIT2 ${code} } set -TEue -o pipefail trap 'on_exit $?' ERR TERM INT EXIT # exec 2>stderr 3> >(tee -ap /dev/stderr) [[ -f stderr ]] && rm stderr # exec 1> >(tee -p /dev/stdout) 2> >(tee stderr | tee -p /dev/stderr) 3> >(tee -p /dev/stderr) # exec 2> >(tee stderr | tee -p /dev/stderr) # 3> >(tee -p /dev/stderr) # exec 3> >(tee stderr | tee -p /dev/stderr) 2>&3 # exec 3> >(tee stderr) 2>&3- # exec 2> >(tee stderr) exec 3>stderr 4>/dev/stderr source ./useless.sh 2>&3 exec 3>&- 4>&- >&2 cat stderr trap - ERR TERM INT EXIT echo --END1 >&2 echo --END2