help-bash
[Top][All Lists]
Advanced

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

Re: Not to set PIPESTATUS unless necessary


From: Peng Yu
Subject: Re: Not to set PIPESTATUS unless necessary
Date: Sat, 18 May 2024 08:56:57 -0500

On Sat, May 18, 2024 at 5:21 AM Andreas Kähäri <andreas.kahari@abc.se> wrote:
>
> On Sat, May 18, 2024 at 04:54:05AM -0500, Peng Yu wrote:
> > It seems the problem is the definition of pipeline is wrong. If there is
> > just one command, it can not be separated by control operators. Therefore,
> > a pipeline must be made of two or more commands.
> >
> > “ A pipeline is a sequence of one or more commands separated by one of the
> > control operators ‘|’ or ‘|&’.”
> >
> > The dictionary definition of pipeline is below. There must be transmission
> > of information in a pipeline. With just one command, there can not be a
> > pipeline.
> >
> > https://www.merriam-webster.com/dictionary/pipeline
> >
> > “ a direct channel for information”
> >
> > Therefore, the current implementation appears to be a bug for following an
> > error in the manual.
>
> You would also need to take the POSIX standard's definiton of a pipeline
> into account, which I belive would trumph any dictionary's definition
> when it comes to implementing a Unix shell:
>
>         A pipeline is a sequence of one or more commands separated by
>         the control operator '|'.   [1]
>
> This is more or less the same as what you found in the bash manual,
> except for the extension that bash provides with |&

In that case, the POSIX is also defective. It is an impossibility that
one command is separated by a control operator. Even we don't consider
the pipeline issue, "one or more commands separated by the control
operator '|'." is still wrong. It should have been written as "one
COMMAND or more commands separated by the control operator '|'."

"A pipeline is a sequence of one or more commands separated by the
control operator '|'."

"[!] command1 [ | command2 ...]"

Nevertheless, considering a single command as a pipeline, it is a
corruption of the language. Although corruption of human language in
other areas has more significant consequences, it doesn't mean that we
should tolerate language corruption in programming.

https://fee.org/articles/the-corruption-of-language/

The English meaning of "pipeline" must involve transmission of
something. If POSIX uses "pipeline" it shall not include a single
command, or in the formal grammar, it could rename "pipeline" as
"command_or_pipeline". This resolves the language corruption issue.

> In the same document, you'll find the more formal grammar:
>
>         pipeline         :      pipe_sequence
>                          | Bang pipe_sequence
>                          ;
>         pipe_sequence    :                             command
>                          | pipe_sequence '|' linebreak command
>                          ;
>         command          : simple_command
>                          | compound_command
>                          | compound_command redirect_list
>                          | function_definition
>                          ;
>
> As you can see, a "pipeline" is made up from a "pipe sequence" or a "!"
> followed by such a sequence.  A "pipe sequence" is a single "command" or
> a "pipe sequence" followed by a "|" character, an (optional) linebreak
> and a "command".  What a "command" is in the grammar should be self
> evident.
>
> On a higher level, a "program" is made up from "complete commands",
> which are separate "lists" (AND-OR lists), which are single or multiple
> "pipelines" separated by "||" or "&&".
>
>
> [1]
> https://pubs.opengroup.org/onlinepubs/9699919799.2018edition/utilities/V3_chap02.html#tag_18_09_02
>
>
> >
> > On Sat, May 11, 2024 at 1:28 PM Chet Ramey <chet.ramey@case.edu> wrote:
> >
> > > On 5/10/24 5:13 PM, Peng Yu wrote:
> > >
> > > >> I don't
> > > >> think an option to do this would be useful.
> > > >
> > > > I've already shown use cases where it may be useful. After all, it is
> > > > not necessary to diligently set PIPESTATUS duplicating the info in $?
> > > > for simple commands.
> > >
> > > I don't think it's generally useful enough to implement a special option
> > > in the shell itself to enable it. It's easy enough to save $PIPESTATUS
> > > if you want its value.
> > >
> > > --
> > > ``The lyf so short, the craft so long to lerne.'' - Chaucer
> > >                  ``Ars longa, vita brevis'' - Hippocrates
> > > Chet Ramey, UTech, CWRU    chet@case.edu    http://tiswww.cwru.edu/~chet/
> > >
> > > --
> > Regards,
> > Peng
>
> --
> Andreas (Kusalananda) Kähäri
> Uppsala, Sweden
>
> .



-- 
Regards,
Peng



reply via email to

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