49 lines
915 B
Bash
Executable file
49 lines
915 B
Bash
Executable file
#!/bin/sh
|
|
|
|
set -eu
|
|
|
|
SUDO=
|
|
while [ "$#" -gt 0 ]; do
|
|
key="$1"
|
|
case "$key" in
|
|
SUDO)
|
|
SUDO=sudo
|
|
;;
|
|
*)
|
|
echo "Unknown argument: $key"
|
|
exit 1
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
# - Run command with fds 3 and 4 closed so that whatever test.sh does it
|
|
# cannot interfere with these.
|
|
# - Both stdin and stderr of test.sh are written to stdout
|
|
# - Write exit status of test.sh to fd 3
|
|
# - Write stdout to shared/output.txt as well as to fd 4
|
|
# - Redirect fd 3 to stdout
|
|
# - Read fd 3 and let the group exit with that value
|
|
# - Redirect fd 4 to stdout
|
|
ret=0
|
|
{
|
|
{
|
|
{
|
|
{
|
|
ret=0
|
|
(
|
|
exec 3>&- 4>&-
|
|
env --chdir=./shared $SUDO sh -x ./test.sh 2>&1
|
|
) || ret=$?
|
|
echo $ret >&3
|
|
} | tee shared/output.txt >&4
|
|
} 3>&1
|
|
} | {
|
|
read -r xs
|
|
exit "$xs"
|
|
}
|
|
} 4>&1 || ret=$?
|
|
if [ "$ret" -ne 0 ]; then
|
|
echo "test.sh failed"
|
|
exit 1
|
|
fi
|