bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: problem-solution


From: Lawrence Velázquez
Subject: Re: problem-solution
Date: Tue, 2 Feb 2021 13:49:41 -0500

> On Feb 2, 2021, at 11:52 AM, Kevin Buchs <kevin.buchs@gmail.com> wrote:
> 
> Browsing around bashref, I found the lastpipe option and I tried it, but
> it seemed to have no effect.
> 
> Rather than just submit a bug report, I thought I would try to dig in and
> find the problem and try to fix it. When I downloaded the full bash source,
> then I found in NEWS or CHANGES, that lastpipe was only available if job
> control was disabled. Simplest case, just needed a documentation update.

The bash manual does mention this restriction:

        lastpipe
                If set, and job control is not active, the shell runs
                the last command of a pipeline not executed in the
                background in the current shell environment.

(https://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html)

> But, I looked into that further and found the conditional in execute_cmd.c
> which applies the restriction. Finding nothing else about that restriction,
> I decided to try removing it. I found that the full test suite still
> passed. My additional testing showed no flaws.
> 
> Of course, removing this restriction opens up the possibility that a user
> can shoot themselves by trying to use job control at the same time. I think
> that is a pretty rare case where one would want to do that, like, close to
> never. I cannot believe even wanting to use job control with a non-lastpipe
> pipeline is often done. It seems like the reward of having the feature
> available for all interactive users is greater than the risk of someone
> shooting themselves in the foot.

Here is Chet's response to a similar request nearly four years ago
(https://lists.gnu.org/archive/html/bug-bash/2017-03/msg00197.html):

> From: Chet Ramey <chet.ramey@case.edu>
> Subject: Re: The lastpipe shell option even with job control?
> Date: March 28, 2017 at 10:17:54 AM EDT
> To: "Dr. Werner Fink" <werner@suse.de>, bug-bash@gnu.org
> Cc: chet.ramey@case.edu
> Reply-To: chet.ramey@case.edu
> 
> On 3/27/17 9:44 AM, Dr. Werner Fink wrote:
>> Hi,
>> 
>> I'd like to ask if there is crucial reason, beside the correct foreground
>> process group, not to allow the lastpipe shell option for an interactive
>> bash? Maybe something like in the attachment could be an option?
> 
> Yes, there is. Once you decide you're going to allow lastpipe when job
> control is enabled, you commit to handling ^Z and allowing the user to
> suspend that pipeline. You have to do something with the foreground
> shell at that point. An interactive shell is already ignoring SIGTSTP,
> so you'll have to undo that, set a handler, figure out where you are,
> and decide what to do.
> 
> Some other shells attempt to solve the problem by forking (from the
> TSTP handler??) cleaning up all the state, juggling the jobs table and
> process status, and letting the forked shell continue with the pipeline,
> but that's really fragile and I've never been tempted to implement it.
> 
> Chet
> -- 
> ``The lyf so short, the craft so long to lerne.'' - Chaucer
>                ``Ars longa, vita brevis'' - Hippocrates
> Chet Ramey, UTech, CWRU    chet@case.edu    http://cnswww.cns.cwru.edu/~chet/


--
vq


reply via email to

[Prev in Thread] Current Thread [Next in Thread]