<div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote gmail_quote_container"><div dir="ltr" class="gmail_attr">On Thu, Dec 5, 2024 at 2:13 PM Dan Cross <<a href="mailto:crossd@gmail.com">crossd@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On Thu, Dec 5, 2024 at 3:56 PM <<a href="mailto:arnold@skeeve.com" target="_blank">arnold@skeeve.com</a>> wrote:<br>
> Chet Ramey via TUHS <<a href="mailto:tuhs@tuhs.org" target="_blank">tuhs@tuhs.org</a>> wrote:<br>
> > On 12/5/24 10:19 AM, Dan Cross wrote:<br>
> ><br>
> > > Unix pipelines, on the other hand, tend to be used in a manner that is<br>
> > > strictly linear, without the fan-out and fan-in capabilities described<br>
> > > by Morrison. Of course, nothing prevents one from building a<br>
> > > Morrison-style "network" from Unix processes and pipes, though it's<br>
> > > hard to see how that would work without something like `select`, which<br>
> > > didn't yet exist in 1978. Regardless, Unix still doesn't expose a<br>
> > > particularly convenient syntax for expressing these sorts of<br>
> > > constructions at the shell.<br>
> ><br>
> > Process substitution is about as close as we can get, but most programs<br>
> > still process their filename arguments one at a time, beginning to end.<br>
> ><br>
> > The canonical process substitution example is<br>
> ><br>
> >       diff <(old-program-version) <(new-program-version)<br>
> ><br>
> > to do simple regression testing.<br>
><br>
> And fanout is simply<br>
><br>
>         ... | tee >(pipeline1) >(pipeline2)<br>
<br>
And indeed these things are pretty nifty, but don't they generate<br>
trees, and not arbitrary dags? They don't quite capture the full<br>
generality of Morrison-style networks since it doesn't seem like<br>
there's a way to connect process substitution fan-out with fan-in; at<br>
least, not conveniently.<br>
<br>
It is, perhaps, notable that Go allows me to do this sort of thing<br>
with channels and goroutines, but it has `select` built into the<br>
language.<br>
<br>
Funny, despite using Unix almost daily for over 30 years now, I don't<br>
think I've ever felt limited by the power of pipelines. On the<br>
contrary, I've lost count of the times I've felt limited on systems<br>
that do Not support pipes.<br></blockquote><div><br></div><div>The <() , >()  syntax is a bash extension. Not all shells support it. And</div><div>I couldn't find them in POSIX Issue 8.</div><div><br></div><div>Warner</div></div></div>