|
|
|
@ -1,34 +1,26 @@ |
|
|
|
#!/bin/bash |
|
|
|
|
|
|
|
function on_exit { |
|
|
|
function 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 |
|
|
|
|
|
|
|
# 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 ON_EXIT2 ${code} |
|
|
|
|
|
|
|
>&4 echo EXIT ${code} |
|
|
|
} |
|
|
|
|
|
|
|
set -TEue -o pipefail |
|
|
|
trap 'on_exit $?' ERR TERM INT EXIT |
|
|
|
# exec 2>stderr 3> >(tee -ap /dev/stderr) |
|
|
|
trap 'exit $?' ERR TERM INT EXIT |
|
|
|
[[ -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) |
|
|
|
export -f exit |
|
|
|
|
|
|
|
# magic FD |
|
|
|
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 |
|
|
|
[[ -s stderr ]] && >&2 cat stderr |