How can I suppress all output from a command using Bash?

BashShellScriptingEcho

Bash Problem Overview


I have a Bash script that runs a program with parameters. That program outputs some status (doing this, doing that...). There isn't any option for this program to be quiet. How can I prevent the script from displaying anything?

I am looking for something like Windows' "echo off".

Bash Solutions


Solution 1 - Bash

The following sends standard output to the null device (bit bucket).

scriptname >/dev/null

And if you also want error messages to be sent there, use one of (the first may not work in all shells):

scriptname &>/dev/null
scriptname >/dev/null 2>&1
scriptname >/dev/null 2>/dev/null

And, if you want to record the messages, but not see them, replace /dev/null with an actual file, such as:

scriptname &>scriptname.out

For completeness, under Windows cmd.exe (where "nul" is the equivalent of "/dev/null"), it is:

scriptname >nul 2>nul

Solution 2 - Bash

Something like

script > /dev/null 2>&1

This will prevent standard output and error output, redirecting them both to /dev/null.

Solution 3 - Bash

Try

: $(yourcommand)

: is short for "do nothing".

$() is just your command.

Solution 4 - Bash

An alternative that may fit in some situations is to assign the result of a command to a variable:

$ DUMMY=$( grep root /etc/passwd 2>&1 )
$ echo $?
0
$ DUMMY=$( grep r00t /etc/passwd 2>&1 )
$ echo $?
1

Since Bash and other POSIX commandline interpreters does not consider variable assignments as a command, the present command's return code is respected.

Note: assignement with the typeset or declare keyword is considered as a command, so the evaluated return code in case is the assignement itself and not the command executed in the sub-shell:

$ declare DUMMY=$( grep r00t /etc/passwd 2>&1 )
$ echo $?
0

Solution 5 - Bash

Like andynormancx' post, use this (if you're working in an Unix environment):

scriptname > /dev/null

Or you can use this (if you're working in a Windows environment):

scriptname > nul

Solution 6 - Bash

Take a look at this example from The Linux Documentation Project:

>3.6 Sample: stderr and stdout 2 file > >This will place every output of a program to a file. This is suitable sometimes for cron entries, if you want a command to pass in absolute silence. > rm -f $(find / -name core) &> /dev/null

That said, you can use this simple redirection:

/path/to/command &>/dev/null

Solution 7 - Bash

This is another option

scriptname |& :

Solution 8 - Bash

In your script you can add the following to the lines that you know are going to give an output:

some_code 2>>/dev/null

Or else you can also try

some_code >>/dev/null

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Question6bytesView Question on Stackoverflow
Solution 1 - BashandynormancxView Answer on Stackoverflow
Solution 2 - BashDiego SevillaView Answer on Stackoverflow
Solution 3 - BashV0idSt4rView Answer on Stackoverflow
Solution 4 - BashsementeView Answer on Stackoverflow
Solution 5 - BashLucas Gabriel SánchezView Answer on Stackoverflow
Solution 6 - BashivanleonczView Answer on Stackoverflow
Solution 7 - BashZomboView Answer on Stackoverflow
Solution 8 - BashRohan DsouzaView Answer on Stackoverflow