#990985 zsh: SIGPIPE trap not executed when the builtin that generates it is the last command

Package:
zsh
Source:
zsh
Description:
shell with lots of features
Submitter:
Vincent Lefevre
Date:
2021-07-12 09:33:03 UTC
Severity:
normal
#990985#5
Date:
2021-07-12 09:26:59 UTC
From:
To:
With zsh 5.8, the SIGPIPE trap is not executed when the builtin that
generates it is the last command of a subshell:

zira% ( trap 'echo PIPE >&2' PIPE; sleep 1; pwd; ) | :
zsh: write error: broken pipe

With an additional command (builtin), this is OK:

zira% ( trap 'echo PIPE >&2' PIPE; sleep 1; pwd; :; ) | :
zsh: write error: broken pipe
PIPE

I wonder whether this is related to the (undocumented?) optimization
that exec's the last command of a subshell / shell script (though
this is not applicable to builtins).

This also occurs with zsh 5.7.1-1 in Debian 10 (buster).

There is the same issue with mksh, but not with dash, ksh93, bash and
yash.