execline
Software
skarnet.org

# The `pipeline` program

`pipeline` runs two commands with a pipe between them.

## Interface

In an execlineb script:

         pipeline [ -d ] [ -r | -w ] { prog1... } prog2...

- `pipeline` reads prog1... in a block and unquotes it.
- It runs prog1... as a child process and execs into prog2..., with a pipe between prog1's stdout and prog2's stdin.
- prog1's pid is available in prog2 as the ! environment variable.

## Options

- `-d` : run prog1... as a grandchild of `pipeline`. This is meant to prevent a zombie from hanging around if prog2... fails to wait for its children.
- `-r` : make prog1... the writer and prog2... the reader. This is the default.
- `-w` : make prog1... the reader and prog2... the writer.

## Notes

- You can easily create a chain of pipes: `execlineb -Pc 'pipeline { a } pipeline { b } c'` is roughly equivalent to `sh -c 'exec a | b | c'`, except that shells usually run `c` as a child process like `a` and `b`, and `exec` has no effect.