diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 12:01:11 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 12:01:11 +0000 |
commit | 3be121a05dcd170854a8dac6437b29f297a6ff4e (patch) | |
tree | 05cf57183f5a23394eca11b00f97a74a5dfdf79d /scripts/annotate-output.sh | |
parent | Initial commit. (diff) | |
download | devscripts-3be121a05dcd170854a8dac6437b29f297a6ff4e.tar.xz devscripts-3be121a05dcd170854a8dac6437b29f297a6ff4e.zip |
Adding upstream version 2.23.4+deb12u1.upstream/2.23.4+deb12u1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rwxr-xr-x | scripts/annotate-output.sh | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/scripts/annotate-output.sh b/scripts/annotate-output.sh new file mode 100755 index 0000000..8ed7276 --- /dev/null +++ b/scripts/annotate-output.sh @@ -0,0 +1,102 @@ +#!/bin/bash +# this script was downloaded from: +# https://jeroen.a-eskwadraat.nl/sw/annotate +# and is part of devscripts ###VERSION### + +# Executes a program annotating the output linewise with time and stream +# Version 1.2 + +# Copyright 2003, 2004 Jeroen van Wolffelaar <jeroen@wolffelaar.nl> + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +PROGNAME=${0##*/} + +addtime() { + while IFS= read -r line; do + printf "%s %s: %s\n" "$(date "${FMT}")" "$1" "$line" + done + if [ ! -z "$line" ]; then + printf "%s %s: %s" "$(date "${FMT}")" "$1" "$line" + fi +} + +addprefix() { + while IFS= read -r line; do + printf "%s: %s\n" "$1" "$line" + done + if [ ! -z "$line" ]; then + printf "%s: %s" "$1" "$line" + fi +} + +usage() { + echo \ +"Usage: $PROGNAME [options] program [args ...] + Run program and annotate STDOUT/STDERR with a timestamp. + + Options: + +FORMAT - Controls the timestamp format as per date(1) + -h, --help - Show this message" +} + +FMT="+%H:%M:%S" +while [ "$1" ]; do + case "$1" in + +*) + FMT="$1" + shift + ;; + -h|-help|--help) + usage + exit 0 + ;; + *) + break + ;; + esac +done + +if [ $# -lt 1 ]; then + usage + exit 1 +fi + +cleanup() { __st=$?; rm -rf "$tmp"; exit $__st; } +trap cleanup 0 +trap 'exit $?' 1 2 13 15 + +tmp=$(mktemp -d --tmpdir annotate.XXXXXX) || exit 1 +OUT=$tmp/out +ERR=$tmp/err + +mkfifo $OUT $ERR || exit 1 + +if [ "${FMT/\%}" != "${FMT}" ] ; then + addtime O < $OUT & + addtime E < $ERR & +else + # If FMT does not contain a %, use the optimized version that + # does not call 'date'. + addprefix "${FMT#+} O" < $OUT & + addprefix "${FMT#+} E" < $ERR & +fi + +echo "Started $@" | addtime I +"$@" > $OUT 2> $ERR ; EXIT=$? +rm -f $OUT $ERR +wait + +echo "Finished with exitcode $EXIT" | addtime I + +exit $EXIT |