Pipe one shell command into another

Andrew via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sat Jan 30 09:11:31 PST 2016


On Saturday, 30 January 2016 at 15:57:49 UTC, Griffon26 wrote:
> On Saturday, 30 January 2016 at 15:12:26 UTC, Andrew wrote:
>>   foreach(line; pipesLs.stdout.byLine)
>>     pipesSort.stdin.writeln(line);
>
> Because you write sort's input first and read its output later, 
> it might end up blocking if ls generates too much data. The 
> output pipe of sort will fill up, causing sort to block and not 
> read data from its input pipe anymore, resulting in your 
> program blocking when the input pipe has filled up.
>
> I have a piece of code using poll to write to two input pipes 
> and read from one output pipe, but it's a bit more complex than 
> what you need. However, it also uses pipeShell to specify 
> multiple commands at once. Since your program only needs to 
> read the output (and not generate input), you may find 
> pipeShell useful.
>
> https://github.com/Griffon26/tdiff3/blob/87709dd51c279e9896f37ba1cef477a525e44562/source/gnudiff.d
>
> Disclaimer: I'm not an experienced D programmer. My D code may 
> not be pretty =)

pipeShell did the trick.

Thank you very much!

Andrew


More information about the Digitalmars-d-learn mailing list