29d401c22d
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 .'.
35 lines
743 B
Plaintext
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}
|