62

How can I hide the screen output (printf) of a shell application in Linux?

1

5 Answers 5

87

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.

7
  • The first one didn't work for wget
    – Jader Dias
    Jul 17, 2009 at 3:07
  • That's cause wget uses stderr for some of it's output. The second one should work. Jul 17, 2009 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 Jul 17, 2009 at 3:17
  • 1
    For wget you can use the -q options to make it quiet.
    – pkhamre
    Mar 30, 2012 at 10:12
  • Any way to suppress output written directly to /dev/tty?
    – d11wtq
    Jul 17, 2014 at 7:08
36

There are three I/O devices available on the command line.

 standard input  - 0
 standard output - 1
 standard error  - 2

To redirect standard output (the default output) to a file (and overwrite the file), use

 command > file.log

To append to file.log, use two >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 (standard error) into 1 (standard output), and sends standard output to file.log

Notice that it's also possible to redirect standard input into a command that expects standard input

 command << file.txt


For more details, check out the Advanced Bash Scripting Guide.

3
  • Can somebody explain how the command > file.log 2>&1 works?
    – Cory Klein
    May 23, 2011 at 22:37
  • How low of a level would you like to know? May 29, 2011 at 13:54
  • 4
    @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. Nov 27, 2012 at 11:39
16

Hide standard output:

./command >/dev/null

Hide standard and error outputs:

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

Hide standard output and error outputs and release the terminal (run the command in the background):

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

If you just want to hide the output (and not save it to a file), you can use:

Edited:

$ command &> /dev/null

4
  • This will redirect the output to a file called null Jul 17, 2009 at 3:03
  • It generated a null file
    – Jader Dias
    Jul 17, 2009 at 3:04
  • 1
    you wouldn't have meant /dev/null, would you?
    – Babu
    Jul 17, 2009 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, 2009 at 3:13
3

For Mac OS X v10.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 Ubuntu 10.04 (Lucid Lynx) and some Debian/Arch Linux (commented below - thanks, 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.

2
  • My default stty under Debian/Arch does not have these options.
    – hendry
    Mar 3, 2012 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, 2012 at 10:09

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .