Streams redirecting
It is possible to manipulate the standard streams: redirect them or use pipes to process them.
script body:
#!/usr/bin/env bash
ls /not/existed_path 2>/dev/null
ls * /not/existed_path > /tmp/log 2> /tmp/err_log
cat /tmp/log
rm /tmp/log /tmp/err_log
The script running at the console:
We use the “>” redirect action in this command. /dev/null – is a stream termination file to drop any input with no processing. “2>” clause redirects standard output stream to file. Now it is possible to look at output and errors later by calling “cat /tmp/log” or “cat /tmp/err_log”.
Shell Scripting – Standard Input, Output and Error
Working on Linux applications we have several ways to get information from outside and to put it inside: command line args, environment variables, files. All of these sources are legal and good. But it has a finite size. Another way to establish communication is standard streams: input stream (stdin) used for getting data from outside of the app, output stream (stdout) to put data outside of the app, and error to put data outside of the app (stderr).
Each stream acts like a pipe: It has the same buffer to write and read the data. This buffer is available for reading from one application and available for writing from another one. On reading, the occupied buffer size will be reduced and it will be increased on writing. If the average rate of reading and writing is equal – then data passed over the stream can be any number of bytes long.
Table of Content
- Input/output streams operating in the example
- Error stream operating in the example
- Streams redirecting
- Discard the output
- Pipelined streams
- Here document
- Shell Scripting – Standard Input, Output and Error – FAQs
Contact Us