How do I suppress shell script error messages?

You have two options:

Suppress rm warnings

$ rm tempfl.txt 2> /dev/null

Redirect script output to /dev/null

$ ./myscript.sh 2> /dev/null

The latter has a drawback of missing all other warning messages produced by your script.


As the other answers state, you can use command 2> /dev/null to throw away the error output from command

But what is going on here?

> is the operator used to redirect output. 2 is a reference to the standard error output stream, i.e. 2> = redirect error output.

/dev/null is the 'null device' which just swallows any input provided to it. You can combine the two to effectively throw away output from a command.

Full reference:

  • > /dev/null throw away stdout
  • 1> /dev/null throw away stdout
  • 2> /dev/null throw away stderr
  • &> /dev/null throw away both stdout and stderr

you should redirect all error message to /dev/null like

rm tempfl2.txt 2> /dev/null

We can use 2> /dev/null to suppress the output error and || true to ensure a success exit status:

rm foo
=> rm: cannot remove ‘foo’: No such file or directory

rm foo 2> /dev/null
echo $?
=> 1

rm foo 2> /dev/null || true
echo $?
=> 0

If you are using the command in a shell script, makefile, etc, maybe you need this.


Adding to the answers above: It is probably a better idea to keep error messages (like permission denied or some such). Just test existence of the file before deleting it:

[ -f file.txt ] && rm file.txt

This assumes a Bourne like shell, e.g., bash. The above has the additional benefit that it won't try to delete a directory, something rm can't do.