suppress shell script error messages

前端 未结 6 1274
深忆病人
深忆病人 2020-12-24 10:30

In my shell script I got these lines:

rm tempfl.txt
rm tempfl2.txt

If these do not exist I get the error messages:

rm: temp         


        
相关标签:
6条回答
  • 2020-12-24 11:06

    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
    0 讨论(0)
  • 2020-12-24 11:06

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

    rm tempfl2.txt 2> /dev/null
    
    0 讨论(0)
  • 2020-12-24 11:13

    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.

    0 讨论(0)
  • 2020-12-24 11:17

    Try this command:

    rm -f tempfl.txt
    

    the -f option acts like this:

    -f, --force  ignore nonexistent files, never prompt
    

    The command also doesn't report a non-zero error code in case the file doesn't exist.

    0 讨论(0)
  • 2020-12-24 11:18

    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.

    0 讨论(0)
  • 2020-12-24 11:23

    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.

    0 讨论(0)
自定义标题
段落格式
字体
字号
代码语言
提交回复
热议问题