1234567891011121314151617181920212223242526272829303132333435363738394041 |
- #!/bin/bash
- set -euo pipefail
- if [ "$#" == "0" ]
- then
- echo capture
- exit 0
- fi
- . "${BASH_SOURCE[0]%/*}"/helpers/common.sh
- LOG_ROOT="$HOME"/.local/var/log/shell
- PROG="$1"
- SUBPROG="$(get_subprog "$@")"
- TIMESTAMP=$(date +%Y%m%d_%H%M%S_%N)
- LOG_DIR="$LOG_ROOT"/"$PROG"/"$SUBPROG"/"$TIMESTAMP"
- mkdir -p "$LOG_DIR"
- OUT="$LOG_DIR"/stdout
- ERR="$LOG_DIR"/stderr
- DAT="$LOG_DIR"/dat
- INF="$LOG_DIR"/info
- CMD="$( (set -x; : "$@") 2>&1 | cut -d: -f2- | cut -d' ' -f2-)"
- info(){
- cat <<EOF > "$INF"
- $CMD
- status=$?
- EOF
- exec 2>&-
- exec 1>&-
- wait "$err_pid" "$out_pid"
- }
- trap 'info' EXIT
- exec 2> >(tee -a "$DAT" "$ERR")
- err_pid="$!"
- exec 1> >(tee -a "$DAT" "$OUT")
- out_pid="$!"
- "$@"
|