40 lines
847 B
Bash
Executable file
40 lines
847 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
|