Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > gnu.bash.bug > #16704

Re: process substitution error handling

Path csiph.com!goblin2!goblin1!goblin.stu.neva.ru!usenet.stanford.edu!not-for-mail
From "Jason A. Donenfeld" <Jason@zx2c4.com>
Newsgroups gnu.bash.bug
Subject Re: process substitution error handling
Date Thu, 6 Aug 2020 14:14:07 +0200
Lines 55
Approved bug-bash@gnu.org
Message-ID <mailman.982.1596716065.2739.bug-bash@gnu.org> (permalink)
References <20200420051508.GA2359844@zx2c4.com> <7496b183-2db3-6c03-6074-928adcd08f45@case.edu> <CAHmME9pzOY_0EJ69y9wt6r-Jh3frZpV8XdFC6zG5EOkZ99h-1A@mail.gmail.com> <CAH7i3LorhQnvpd0YvTcHsuHM4=v6kTQ+Z8Yf+L43AT1V3zKOFg@mail.gmail.com> <CAHmME9pUd51YvaRWD6az8XgJ=EFw+v+t6xdkBOUx=jqKnH1kbw@mail.gmail.com>
NNTP-Posting-Host lists.gnu.org
Mime-Version 1.0
Content-Type text/plain; charset="UTF-8"
Content-Transfer-Encoding quoted-printable
X-Trace usenet.stanford.edu 1596716065 29708 209.51.188.17 (6 Aug 2020 12:14:25 GMT)
X-Complaints-To action@cs.stanford.edu
Cc "bug-bash@gnu.org" <bug-bash@gnu.org>
To Oğuz <oguzismailuysal@gmail.com>
Envelope-to bug-bash@gnu.org
DKIM-Signature v=1; a=rsa-sha1; c=relaxed; d=zx2c4.com; h=mime-version :references:in-reply-to:from:date:message-id:subject:to:cc :content-type:content-transfer-encoding; s=mail; bh=F+nOaWtf6VRo i6iR4CBAu3q3DTI=; b=DivPPvK9PPMWs9Yks/LzQ567r0p5LuXAye/x2No4RDsa SYScx+usl1do+ldaTTooh19RBL3ZZGN79oaoDPOVfF16HT7DBvwckZ0oKQkcwyc1 oWVzGHnSlNpQufRaiTBKU86YZwiuCiPTo4CH7/kKs5eIK2gLvw0GailLfaSZjyVO Fce1IeNUTDGn5QPCGMfFjHSbTA6KOY3iWns7IhS6k6RBVeXpHUjKAanBptsbcf4Z cAOSxoqsjAQh1ANWtaz4w5b2vWgfTcDqrk/qbybXknu+koyD9pOqew3+e1MDJo8h QDOdaLvqjj/ecGWMc1CeWJZkbPMf5QfkFvTBzcS63g==
X-Gm-Message-State AOAM531N07NqLGJt2HEc1ysI/IctqoqkBFoMPWac17kARG5k50MjWcmq zRGSded9gCc/wB8YMoG/4JDEwUY1rDNQACFc9vo=
X-Google-Smtp-Source ABdhPJyRM05ba9ALbJjU+1gj3b9zxPEjAWuoCbF7ILLTKAsuI2yP1Qn1LYpJvksGhGyVhWKsY4QFLm757bE02jJMKSs=
X-Received by 2002:a92:d2c8:: with SMTP id w8mr10771970ilg.38.1596716060615; Thu, 06 Aug 2020 05:14:20 -0700 (PDT)
In-Reply-To <CAH7i3LorhQnvpd0YvTcHsuHM4=v6kTQ+Z8Yf+L43AT1V3zKOFg@mail.gmail.com>
X-Gmail-Original-Message-ID <CAHmME9pUd51YvaRWD6az8XgJ=EFw+v+t6xdkBOUx=jqKnH1kbw@mail.gmail.com>
Received-SPF pass client-ip=192.95.5.64; envelope-from=Jason@zx2c4.com; helo=mail.zx2c4.com
X-detected-operating-system by eggs.gnu.org: First seen = 2020/08/06 08:14:21
X-ACL-Warn Detected OS = Linux 3.11 and newer
X-Spam_score_int -20
X-Spam_score -2.1
X-Spam_bar --
X-Spam_report (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=ham autolearn_force=no
X-Spam_action no action
X-BeenThere bug-bash@gnu.org
X-Mailman-Version 2.1.23
Precedence list
List-Id Bug reports for the GNU Bourne Again SHell <bug-bash.gnu.org>
List-Unsubscribe <https://lists.gnu.org/mailman/options/bug-bash>, <mailto:bug-bash-request@gnu.org?subject=unsubscribe>
List-Archive <https://lists.gnu.org/archive/html/bug-bash>
List-Post <mailto:bug-bash@gnu.org>
List-Help <mailto:bug-bash-request@gnu.org?subject=help>
List-Subscribe <https://lists.gnu.org/mailman/listinfo/bug-bash>, <mailto:bug-bash-request@gnu.org?subject=subscribe>
X-Mailman-Original-Message-ID <CAHmME9pUd51YvaRWD6az8XgJ=EFw+v+t6xdkBOUx=jqKnH1kbw@mail.gmail.com>
X-Mailman-Original-References <20200420051508.GA2359844@zx2c4.com> <7496b183-2db3-6c03-6074-928adcd08f45@case.edu> <CAHmME9pzOY_0EJ69y9wt6r-Jh3frZpV8XdFC6zG5EOkZ99h-1A@mail.gmail.com> <CAH7i3LorhQnvpd0YvTcHsuHM4=v6kTQ+Z8Yf+L43AT1V3zKOFg@mail.gmail.com>
Xref csiph.com gnu.bash.bug:16704

Show key headers only | View raw


On Thu, Aug 6, 2020 at 1:15 PM Oğuz <oguzismailuysal@gmail.com> wrote:
>
>
>
> 6 Ağustos 2020 Perşembe tarihinde Jason A. Donenfeld <Jason@zx2c4.com> yazdı:
>>
>> Hi,
>>
>> It may be a surprise to some that this code here winds up printing
>> "done", always:
>>
>> $ cat a.bash
>> set -e -o pipefail
>> while read -r line; do
>>        echo "$line"
>> done < <(echo 1; sleep 1; echo 2; sleep 1; false; exit 1)
>> sleep 1
>> echo done
>>
>> $ bash a.bash
>> 1
>> 2
>> done
>>
>> The reason for this is that process substitution right now does not
>> propagate errors. It's sort of possible to almost make this better
>> with `|| kill $$` or some variant, and trap handlers, but that's very
>> clunky and fraught with its own problems.
>>
>> Therefore, I propose a `set -o substfail` option for the upcoming bash
>> 5.1, which would cause process substitution to propagate its errors
>> upwards, even if done asynchronously.
>>
>
>     set -e o substfail
>     : <(sleep 10; exit 1)
>     foo
>
> Say that `foo' is a command that takes longer than ten seconds to complete, how would you expect the shell to behave here? Should it interrupt `foo' or wait for its termination and exit then? Or do something else?

It's likely simpler to check after foo, since bash can just ask "are
any of the process substitution processes that I was wait(2)ing on in
exited state with non zero return?", which just involves looking in a
little list titled exited_with_error_process_subst for being non-null.

A more sophisticated implementation could do that asynchronously with
signals and SIGCHLD. In that model, if bash gets sigchld from a
process that exits with failure, it then exits inside the signal
handler there. This actually wouldn't be too hard to do either.

Jason

Back to gnu.bash.bug | Previous | Next | Find similar


Thread

Re: process substitution error handling "Jason A. Donenfeld" <Jason@zx2c4.com> - 2020-08-06 14:14 +0200

csiph-web