mirror of
https://github.com/containers/podman.git
synced 2025-06-01 09:06:44 +08:00
40 lines
1.0 KiB
Bash
Executable File
40 lines
1.0 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# This script executes a command while logging all output to a temporary
|
|
# file. If the command exits non-zero, then all output is sent to the console,
|
|
# before returning the exit code. If the script itself fails, the exit code 121
|
|
# is returned.
|
|
|
|
set -eo pipefail
|
|
|
|
SCRIPT_BASEDIR="$(basename $0)"
|
|
|
|
badusage() {
|
|
echo "Incorrect usage: $SCRIPT_BASEDIR) <command> [options]" > /dev/stderr
|
|
echo "ERROR: $1"
|
|
exit 121
|
|
}
|
|
|
|
COMMAND="$@"
|
|
[[ -n "$COMMAND" ]] || badusage "No command specified"
|
|
|
|
OUTPUT_TMPFILE="$(mktemp -p '' ${SCRIPT_BASEDIR}_output_XXXX)"
|
|
output_on_error() {
|
|
RET=$?
|
|
set +e
|
|
if [[ "$RET" -ne "0" ]]
|
|
then
|
|
echo "---------------------------"
|
|
cat "$OUTPUT_TMPFILE"
|
|
echo "[$(date --iso-8601=second)] <exit $RET> $COMMAND"
|
|
fi
|
|
rm -f "$OUTPUT_TMPFILE"
|
|
}
|
|
trap "output_on_error" EXIT
|
|
|
|
"$@" 2>&1 | while IFS='' read LINE # Preserve leading/trailing whitespace
|
|
do
|
|
# Every stdout and (copied) stderr line
|
|
echo "[$(date --iso-8601=second)] $LINE"
|
|
done >> "$OUTPUT_TMPFILE"
|