可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
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: tempfl2.txt: No such file or directory
rm: tempfl.txt: No such file or directory
Is there a way to only suppress these messages even though they do not always appear, as the files might exist?
回答1:
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.
回答2:
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
回答3:
you should redirect all error message to /dev/null like
rm tempfl2.txt 2> /dev/null
回答4:
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.
回答5:
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.
回答6:
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.