Bash streams: Difference between revisions
From wikinotes
(→stdin) |
|||
Line 51: | Line 51: | ||
done < /dev/stdin | done < /dev/stdin | ||
</source> | </source> | ||
get user input | |||
<syntaxhighlight lang="bash"> | |||
# accepts keys until newline (enter) | |||
read user_input | |||
echo $user_input | |||
# get user input, with prompt | |||
read -p '>>> ' user_input | |||
</syntaxhighlight> | |||
</blockquote><!-- stdin --> | </blockquote><!-- stdin --> | ||
Revision as of 18:36, 11 December 2022
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/stdinget user input
# accepts keys until newline (enter) read user_input echo $user_input # get user input, with prompt read -p '>>> ' user_inputstdout, 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