If you want to redirect the output of one program into the input of another, just use a simple pipeline:
program1 arg arg | program2 arg arg
If you want to save the output of
program1 into a file and pipe it into
program2, you can use
program1 arg arg | tee output-file | program2 arg arg
All programs in a pipeline are run simultaneously. Most programs typically use blocking I/O: if when they try to read their input and nothing is there, they block: that is, they stop, and the operating system de-schedules them to run until more input becomes available (to avoid eating up the CPU). Similarly, if a program earlier in the pipeline is writing data faster than a later program can read it, eventually the pipe’s buffer fills up and the writer blocks: the OS de-schedules it until the pipe’s buffer gets emptied by the reader, and then it can continue writing again.
If you want to use the output of
program1 as the command-line parameters, you can use the backquotes or the
# Runs "program1 arg", and uses the output as the command-line arguments for # program2 program2 `program1 arg` # Same as above program2 $(program1 arg)
$() syntax should be preferred, since they are clearer, and they can be nested.