62

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

1

5 Answers 5

88

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 Commented Jul 17, 2009 at 3:07
  • That's cause wget uses stderr for some of it's output. The second one should work. Commented 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 Commented Jul 17, 2009 at 3:17
  • 1
    For wget you can use the -q options to make it quiet. Commented Mar 30, 2012 at 10:12
  • Any way to suppress output written directly to /dev/tty? Commented 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? Commented May 23, 2011 at 22:37
  • How low of a level would you like to know? Commented 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. Commented 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 Commented Jul 17, 2009 at 3:03
  • It generated a null file Commented Jul 17, 2009 at 3:04
  • 1
    you wouldn't have meant /dev/null, would you? Commented 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. Commented 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. Commented 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. Commented Mar 30, 2012 at 10:09

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.