freebsd-dev/tools/regression/bin/sh/builtins/fc2.0
Jilles Tjoelker 29d401c22d sh: Do not run callers' exception handlers in subshells.
Reset the exception handler in the child to main's.

This avoids inappropriate double cleanups or shell duplication when the
exception is caught, such as 'fc' and future 'command eval' and 'command .'.
2009-12-25 20:21:35 +00:00

35 lines
743 B
Plaintext

# $FreeBSD$
set -e
trap 'echo Broken pipe -- test failed' pipe
P=${TMPDIR:-/tmp}
cd $P
T=$(mktemp -d sh-test.XXXXXX)
cd $T
mkfifo input output error
HISTFILE=/dev/null sh +m -i <input >output 2>error &
exec 3>input
{
# Command not found, containing slash
echo '/var/empty/nonexistent' >&3
# Read error message, shell will read new input now
read dummy <&5
# Execute bad command again
echo 'fc -e true; echo continued' >&3
read dummy <&5
read line <&4 && [ "$line" = continued ] && : ${rc:=0}
exec 3>&-
# Old sh duplicates itself after the fc, producing another line
# of output.
if read line <&4; then
echo "Extraneous output: $line"
rc=1
fi
} 4<output 5<error
exec 3>&-
rm input output error
rmdir ${P}/${T}
exit ${rc:-3}