0

I have a script with many commands. Like

#!/bin/sh
mv new /root/
mv old /root/ 
mv foo /code
#many other commands

If the file 'new' is not found bash will give an error message:foo: No such file or directory

I can suppress the error message by redirecting all output from stderr to /dev/null

mv foo /code 2>1 /dev/null

Questions:
Is there a way to simply do it without modifying whole script? Is there a way in which to suppress all the error message in a script?

4
  • 1
    You can redirect all of stderr when running the script, i.e. ./myscript.sh 2 > /dev/null
    – ernie
    Nov 15, 2013 at 17:24
  • Question: Do you mean the normal bourne shell (as in your /bin/sh example) or bash (which you tagged it with).
    – Hennes
    Nov 15, 2013 at 17:33
  • yes normal shell
    – Niresh
    Nov 15, 2013 at 17:35
  • 1
    The question is why you're writing a script that you expect to throw errors on files that aren't found. You should check if the source file(s) and the target(s) exist(s) before moving it/them somewhere. The proper way to get rid of an error message is to prevent the error from happening in the first place.
    – slhck
    Nov 15, 2013 at 17:35

1 Answer 1

1

You can suppress all messages in the script by starting the script like this:
yourcommand &>filename. E.g. ./myscript &> /dev/null

Or you could use your_script 2> /dev/null

The last will redirect all output from stderr to the bitbucket with no need to append that to every command. Since this removes all the errors from the visible output this will make the script very hard to debug. You should check the return value of each command to see if an error occurred and optionally abort.

You can do the latter with $?.

E.g.

#!/usr/bin/env bash
mv new /root/
if [[ $? -ne 0 ]]; then
   #ignore error since it is not important, or
   #
   # echo "YIPES! CRITICAL FAILURE. Aborting whole script!
   exit 1
fi
Next command here

Etc etc.

You must log in to answer this question.

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