You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
925 B
42 lines
925 B
#!/usr/bin/env -S -- bash
|
|
|
|
# CONSTANTS
|
|
|
|
TMP_ERROR=$(mktemp -t "$(basename $0).XXXXXXXX" --tmpdir=/run/user/$(id -u))
|
|
|
|
# FUNCTIONS
|
|
|
|
function on_exit {
|
|
code=${1:-0}
|
|
|
|
stack_lines=("${BASH_LINENO[@]}")
|
|
stack_functions=("${FUNCNAME[@]}")
|
|
stack_sources=("${BASH_SOURCE[@]}")
|
|
|
|
tmp_error=${2:-/dev/null}
|
|
echo "ERROR #${code} due to:"
|
|
[[ -s $tmp_error ]] && cat $tmp_error && rm $tmp_error
|
|
|
|
echo "${stack_lines[@]}"
|
|
echo "${stack_functions[@]}"
|
|
echo "${stack_sources[@]}"
|
|
|
|
trap - ERR TERM INT EXIT
|
|
builtin exit $code
|
|
}
|
|
|
|
# MAIN
|
|
|
|
command=$1
|
|
shift
|
|
args=("$@")
|
|
args2=()
|
|
for i in "${args[@]}"; do args2+=("${i@Q}"); done
|
|
# echo "----$command ${args2[@]}------"
|
|
|
|
set -TEue -o pipefail
|
|
export -f on_exit
|
|
# echo PROCESS START
|
|
bash -c "set -TEue -o pipefail; trap 'on_exit \$? $TMP_ERROR' ERR TERM INT EXIT; source $command ${args2[*]}" 3>&1 1>&2 2>&3 | tee $TMP_ERROR
|
|
# echo PROCESS END succesfully
|
|
|