From b17ae4187f18f18b65003af5ed32d6c3d0a3212f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 14 Sep 2023 10:47:52 -0300 Subject: bin/muffle: Re-interleave STDOUT and STDERR on error --- bin/muffle | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) (limited to 'bin/muffle') diff --git a/bin/muffle b/bin/muffle index 73c9103..6f93306 100755 --- a/bin/muffle +++ b/bin/muffle @@ -67,13 +67,27 @@ shift $((OPTIND - 1)) OUT="$(mkstemp)" ERR="$(mkstemp)" -trap 'rm -f "$OUT" "$ERR"' EXIT +STATUS_F="$(mkstemp)" +trap 'rm -f "$OUT" "$ERR" "$STATUS_F"' EXIT -STATUS=0 -"$@" 1>"$OUT" 2>"$ERR" || STATUS=$? +timed() { + ts -s -m '%.s' +} + +echo 0 > "$STATUS_F" +{ + { "$@" || echo $? > "$STATUS_F"; } | timed | pre out > "$OUT" +} 2>&1 | timed | pre err > "$ERR" +STATUS="$(cat "$STATUS_F")" if [ "$STATUS" != 0 ]; then - cat "$OUT" - cat "$ERR" >&2 + cat "$OUT" "$ERR" | + sort -k2 | while read -r line; do + if [ "$(echo "$line" | cut -d' ' -f1)" = 'out:' ]; then + echo "$line" | cut -d' ' -f3- >&1 + else + echo "$line" | cut -d' ' -f3- >&2 + fi + done exit "$STATUS" fi -- cgit v1.2.3