|
From: | Paul Eggert |
Subject: | Re: bug#17981: [PATCH] maint.mk: less syntax-check noise when SIGPIPE is ignored |
Date: | Fri, 11 Jul 2014 13:58:24 -0700 |
User-agent: | Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.6.0 |
On 07/08/2014 12:42 PM, Eric Blake wrote:
It is unclear at this point whether POSIX would recommend that filter applications should_always_ exit with 0 status on pipe failure, or only do this for EPIPE write failures when SIGPIPE is ignored, or whether it should be optional behavior that must be explicitly enabled via a command-line option and/or system-wide environment variable.
None of these options sound appealing, I'm afraid. The first two would be an incompatible change to longstanding standard behavior. A system-wide environment variable would be problematic for all the usual reaosns. A command-line option would be a pain to use (what? I have to modify all my shell scripts?).
Instead, how about this idea? Change the behavior of the shell so that SIGPIPE is not ignored in a pipeline (except in the pipeline's last member of course), even if it is ignored in the parent. This is also a change to POSIX, but it's a relatively minor one. Or, if we want to be conservative about it, we could make the new behavior depend on a new shell option. Either way, this would solve the problem without having to change grep, sed, etc.
We might also want to have a way to reenable traps in the shell when they're disabled; that's been a longstanding problem even aside from this SIGPIPE business.
[Prev in Thread] | Current Thread | [Next in Thread] |