Hi,

I'd like to run a shell command which involves piping one thing into another and then processes the output line by line, i.e. something like "ls -l | sort -k5,5n"

What I've come up so far with is:

import std.process;
import std.stdio;

void main(){
  auto pipesLs = pipeProcess(["ls", "-l"], Redirect.stdout);
  auto pipesSort = pipeProcess(["sort", "-k5,5n"], Redirect.all);

  scope (exit) wait(pipesSort.pid);

  foreach(line; pipesLs.stdout.byLine)
    pipesSort.stdin.writeln(line);

  pipesSort.stdin.close;

  foreach(line; pipesSort.stdout.byLine)
    writeln(line);
}

This seems to work on this simple example, but is there a better way to do it, and if not, is this reliable? Also, could someone explain to me the necessity of the wait command?

Thanks very much

Andrew

Reply via email to