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.

  • The first one didn't work for wget – Jader Dias Jul 17 '09 at 3:07
  • That's cause wget uses stderr for some of it's output. The second one should work. – theotherreceive Jul 17 '09 at 3:08
  • 2
    Incidentally, you might want to save that wget output to a log file, so when/if your download stops working, you can figure out why. If it's in a script anyway. If this is a one-off type run, then yea, to the trash – Matt Simmons Jul 17 '09 at 3:17
  • 1
    For wget you can use the -q options to make it quiet. – pkhamre Mar 30 '12 at 10:12
  • Any way to suppress output written directly to /dev/tty? – d11wtq Jul 17 '14 at 7:08

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

  • Can somebody explain how the command > file.log 2>&1 works? – Cory Klein May 23 '11 at 22:37
  • How low of a level would you like to know? – Matt Simmons May 29 '11 at 13:54
  • 3
    @nomoreink: it's actually 2 commands, one is > file and the second one is 2>&1. The first one redirects the standard out to a file. The second one takes 2nd file descriptor and redirects it to first one. You can do the reverse, redirect standard output to standard error using >&2 and then redirect standard error to a file with 2> file. – Hubert Kario Nov 27 '12 at 11:39

Hide stdout

./command >/dev/null

Hide stdout and stderr

./command >/dev/null 2>&1

Hide stdout and 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

  • This will redirect the output to a file called null – theotherreceive Jul 17 '09 at 3:03
  • It generated a null file – Jader Dias Jul 17 '09 at 3:04
  • 1
    you wouldn't have meant /dev/null, would you? – Babu Jul 17 '09 at 3:09
  • 1
    Yes, I would have, Babu. I meant $ command &> /dev/null. My apologies for typing too fast for my own good. – Lucho Jul 17 '09 at 3:13

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.

  • My default stty under Debian/Arch does not have these options. – hendry Mar 3 '12 at 4:46
  • I should of course have mentioned that i wasn't even on the OP's OS. Edited my post. – vike Mar 30 '12 at 10:09

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.