#!/bin/bash # Run a command and write stdout/stderr to a temporary file. Print the output only if the command exits with a non-zero exit status tmp=$(mktemp) echo "[silence_successful_output] Running '$@' with output silenced..." >&2 ("$@") 2>&1 &> "$tmp" STATUS=$? if (( $STATUS )) ; then echo "[silence_successful_output] '$@' failed! Output:" >&2 cat "$tmp" >&2 else echo "[silence_successful_output] '$@' succeeded!" fi rm "$tmp" exit $STATUS