25 lines
524 B
Bash
25 lines
524 B
Bash
#!/usr/bin/env bash
|
|||
|
|
# Run a command silently. On failure, replay captured output and exit with the original code.
|
||
|
|
# When DEBUG is set, print start time, command, end time, and duration.
|
||
|
|
tmp=$(mktemp)
|
||
|
|
trap 'rm -f "$tmp"' EXIT
|
||
|
|
|
||
|
|
if [ -n "${DEBUG:-}" ]; then
|
||
|
|
start=$(date +%s)
|
||
|
|
echo "[$(date '+%H:%M:%S')] + $*"
|
||
|
|
fi
|
||
|
|
|
||
|
|
if "$@" > "$tmp" 2>&1; then
|
||
|
|
code=0
|
||
|
|
else
|
||
|
|
code=$?
|
||
|
|
cat "$tmp"
|
||
|
|
fi
|
||
|
|
|
||
|
|
if [ -n "${DEBUG:-}" ]; then
|
||
|
|
end=$(date +%s)
|
||
|
|
echo "[$(date '+%H:%M:%S')] = $* (${code}) $((end - start))s"
|
||
|
|
fi
|
||
|
|
|
||
|
|
exit $code
|