How to hide the screen output (printf) of a shell application in Linux?
You can redirect the output of any program so that it won't be seen.
$ program > /dev/null
This will redirect the standard output - you'll still see any errors
$ program &> /dev/null
This will redirect all output, including errors.
There are three IO devices available on the commandline.
standard in - 0 standard out - 1 standard error - 2
To redirect standard out (the default output) to a file (and overwrite the file), use
command > file.log
To append to file.log, use 2 >s
command >> file.log
to redirect standard error to the file.log, use
command 2> file.log
and to append
command 2>> file.log
To combine the outputs into one stream and send them all to one place
command > file.log 2>&1
This sends 2 (stderr) into 1 (stdout), and sends stdout to file.log
Notice that it's also possible to redirect standard in into a command that expects stdin
command << file.txt
For more details, check out the Advanced Bash Scripting Guide
./command >/dev/null 2>&1
stderr and release terminal (run the command in background)
./command >/dev/null 2>&1 &
If you just want to hide the output (and not save it to a file), you can use:
$ command &> /dev/null
For Mac OS X (10.6 "Snow Leopard"):
If you need to hide the output without letting the program know it by checking the output/error file descriptor you can try using the following in a shell:
stty flusho; command ;stty -flusho
or if you just want to hide input from the terminal by the way:
stty -echo; command ;stty echo
See stty(1) manual page for more information
For Linux all i know is that Ubunutu (10.04 "Lucid") and some "Debian/Arch" (commented below - tnx hendry) doesn't have the
flusho setting (and i can't see anything other appropriate in the man-page). The
echo setting works on the Ubuntu anyway.