70

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

rm tempfl.txt
rm tempfl2.txt

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

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

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

4

6 回答 6

97

你有两个选择:

禁止rm警告

$ rm tempfl.txt 2> /dev/null

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

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

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

于 2013-03-28T09:59:48.723 回答
76

正如其他答案所述,您可以使用command 2> /dev/null丢弃错误输出command

但是这里发生了什么?

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

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

完整参考:

  • > /dev/null扔掉标准输出
  • 1> /dev/null扔掉标准输出
  • 2> /dev/null扔掉标准错误
  • &> /dev/null扔掉stdout stderr
于 2018-06-26T14:26:53.487 回答
7

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

rm tempfl2.txt 2> /dev/null
于 2013-03-28T09:59:53.250 回答
7

我们可以使用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 等中使用该命令,也许您需要这个。

于 2017-12-27T18:28:09.480 回答
6

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

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

这假定了一个类似 Bourne 的 shell,例如 bash。上面还有一个额外的好处,它不会尝试删除目录,这是rm做不到的。

于 2013-03-28T10:09:20.137 回答
5

试试这个命令:

rm -f tempfl.txt

-f 选项的作用如下:

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

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

于 2014-02-19T14:50:02.390 回答