Bash streams
From wikinotes
pipes
Most of the bash Programs: coreutils are designed to used together in a pipeline. The output of one can be redirected to the input of another.
Example
echo ' apple orange#> orange#> orange banana' #> apple #> orange #> banana echo ' apple orange banana' | grep n #> orange #> banana echo ' apple orange banana' | grep n | grep b #> banana
stdin, stdout, stderr
Your terminal interacts with 3 streams:
- stdout: print, echo, etc. text intended for the user
- stderr: logger output, debug info
- stdin: text piped into the current process
stdin
setting stdin
program < file # pipe 'file' contents to 'program's stdin cat file.txt | program # pipe 'file' contents to 'program's stdinread from stdin (by line)
while read line; do echo $line done < /dev/stdinstdout, stderr
# stdout program > stdout.log program 1> stdout.log # stderr program 2> stderr.log # stdout & stderr program 2>&1 stdout_stderr.log program &> stdout_stderr.log
redirecting streams
redirect one stream into another
program 2>&1 # redirect stderr into stdoutredirect programA's stdout to programB's stdin
programA | programB