mirror of
https://github.com/qemu/qemu.git
synced 2026-04-05 21:46:25 +00:00
scripts/qemu-guest-agent/fsfreeze-hook: Avoid use of PIPESTATUS
PIPESTATUS is a bash-specific construct, and this script is supposed
to be POSIX shell. We only use it in one place, to capture the exit
status of a command whose output we are piping to 'logger'.
Replace the PIPESTATUS usage with the trick described in
https://unix.stackexchange.com/questions/14270/get-exit-status-of-process-thats-piped-to-another/70675#70675
which uses a command-group to capture the status of the
first process in the pipeline.
Cc: qemu-stable@nongnu.org
Fixes: 85978dfb6b ("qemu-ga: Optimize freeze-hook script logic of logging error")
Resolves: https://gitlab.com/qemu-project/qemu/-/work_items/3339
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Kostiantyn Kostiuk <kkostiuk@redhat.com>
Link: https://lore.kernel.org/qemu-devel/20260317094806.1944053-3-peter.maydell@linaro.org
Signed-off-by: Kostiantyn Kostiuk <kkostiuk@redhat.com>
This commit is contained in:
committed by
Kostiantyn Kostiuk
parent
b5abb655fa
commit
65b9f4791c
@@ -47,8 +47,23 @@ for file in "$FSFREEZE_D"/* ; do
|
||||
"$file" "$@" >>"$LOGFILE" 2>&1
|
||||
STATUS=$?
|
||||
else
|
||||
"$file" "$@" 2>&1 | logger -t qemu-ga-freeze-hook
|
||||
STATUS=${PIPESTATUS[0]}
|
||||
# We want to pipe the output of $file through 'logger' and also
|
||||
# capture its exit status. Since we are a POSIX script we can't
|
||||
# use PIPESTATUS, so instead this is a trick borrowed from
|
||||
# https://unix.stackexchange.com/questions/14270/get-exit-status-of-process-thats-piped-to-another/70675#70675
|
||||
# which uses command-groups and redirection to get the exit status.
|
||||
# This is equivalent to
|
||||
# "$file" "$@" 2>&1 | logger -t qemu-ga-freeze-hook
|
||||
# plus setting the exit status of the pipe to the exit
|
||||
# status of the first command rather than the last one.
|
||||
{ { { {
|
||||
"$file" "$@" 2>&1 3>&- 4>&-
|
||||
echo $? >&3
|
||||
} | logger -t qemu-ga-freeze-hook >&4
|
||||
} 3>&1
|
||||
} | { read -r xs ; exit "$xs"; }
|
||||
} 4>&1
|
||||
STATUS=$?
|
||||
fi
|
||||
|
||||
if [ "$STATUS" -ne 0 ]; then
|
||||
|
||||
Reference in New Issue
Block a user