#!/bin/bash function exit { code=${1:-0} trap - ERR TERM INT EXIT # a bit of magic: read content of file still on write! count=$(wc -c stderr | cut -d' ' -f1) content=$(head -qc$count stderr) >&4 echo "DETECTED0: [$content]" >&4 echo EXIT ${code} } set -TEue -o pipefail trap 'exit $?' ERR TERM INT EXIT [[ -f stderr ]] && rm stderr export -f exit # magic FD exec 3>stderr 4>/dev/stderr source ./useless.sh 2>&3 exec 3>&- 4>&- trap - ERR TERM INT EXIT [[ -s stderr ]] && >&2 cat stderr