From ef246486a12124d1aba255856fb08ef1ba55fa6d Mon Sep 17 00:00:00 2001 From: Albrecht Lohofener Date: Thu, 9 Jan 2025 13:43:50 +0100 Subject: [PATCH] Improved error handling --- src/qemu_qmp.sh | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/qemu_qmp.sh b/src/qemu_qmp.sh index d4903bd..2070cac 100644 --- a/src/qemu_qmp.sh +++ b/src/qemu_qmp.sh @@ -78,18 +78,25 @@ while getopts ":hvrqsSVRc" option; do [ -z "$PID" ] && exit 1 while true; do # Wait for command exit RETURN_JSON=`echo '{"execute": "guest-exec-status", "arguments": { "pid": '${PID}'}}' | nc -w 1 -U /run/qga.sock` + #echo >&2 "RETURN_JSON: $RETURN_JSON" export EXITCODE=`echo $RETURN_JSON | sed -n 's/.*"exitcode": \([0-9]*\).*/\1/p'` export OUT_DATA=`echo $RETURN_JSON | sed -n 's/.*"out-data": "\([^"]*\).*/\1/p' | base64 -d` + export ERR_DATA=`echo $RETURN_JSON | sed -n 's/.*"err-data": "\([^"]*\).*/\1/p' | base64 -d` export EXITED=`echo $RETURN_JSON | sed -n 's/.*"exited": \(true\|false\).*/\1/p'` if [ "$EXITED" = "true" ]; then break fi sleep 1 done - echo "$OUT_DATA" # Return stdout + if [ -n "$OUT_DATA" ]; then + echo "$OUT_DATA" # Return stdout + fi if [ -z "$EXITCODE" ]; then # Exit code handling exit 1 else + if [ $EXITCODE != 0 ]; then + echo >&2 "Command error \"$ERR_DATA\" (exit code \"$EXITCODE\")" + fi exit "$EXITCODE" fi;; \?) # Invalid option