抑制shell脚本错误消息

时间:2013-03-28 09:57:30

标签: shell suppress-warnings error-suppression

在我的shell脚本中,我得到了这些内容:

rm tempfl.txt
rm tempfl2.txt

如果这些不存在,我会收到错误消息:

rm: tempfl2.txt: No such file or directory
rm: tempfl.txt: No such file or directory

是否有办法仅抑制这些消息,即使它们并不总是出现,因为文件可能存在?

6 个答案:

答案 0 :(得分:55)

您有两种选择:

取消rm警告

$ rm tempfl.txt 2> /dev/null

将脚本输出重定向到/dev/null

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

后者的缺点是缺少脚本生成的所有其他警告消息。

答案 1 :(得分:6)

作为其他答案的状态,您可以使用command 2> /dev/null丢弃command的错误输出

但是这里发生了什么?

>是用于重定向输出的运算符。 2是对标准错误输出流的引用,即2> =重定向错误输出。

/dev/null是“空设备”,仅吞下提供给它的所有输入。您可以将两者结合起来以有效地丢弃命令的输出。

完整参考:

  • > /dev/null扔掉 stdout
  • 1> /dev/null扔掉 stdout
  • 2> /dev/null扔掉 stderr
  • &> /dev/null丢弃 stdout stderr

答案 2 :(得分:5)

您应该将所有错误消息重定向到/ dev / null,如

rm tempfl2.txt 2> /dev/null

答案 3 :(得分:5)

尝试此命令:

rm -f tempfl.txt

-f选项的行为如下:

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

如果文件不存在,该命令也不会报告非零错误代码。

答案 4 :(得分:2)

添加上面的答案:保留错误消息可能是一个更好的主意(如权限被拒绝或某些此类)。只需在删除文件之前测试文件是否存在:

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

这假设像Bourne一样的shell,例如bash。上面的附加好处是它不会尝试删除目录,rm无法做到。

答案 5 :(得分:0)

我们可以使用2> /dev/null来抑制输出错误,使用|| true来确保成功退出状态:

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

如果您在shell脚本,makefile等中使用该命令,可能需要这个。