在我的 shell 脚本中,我得到了这些行:
rm tempfl.txt
rm tempfl2.txt
如果这些不存在,我会收到错误消息:
rm: tempfl2.txt: No such file or directory
rm: tempfl.txt: No such file or directory
有没有办法只抑制这些消息,即使它们并不总是出现,因为文件可能存在?
在我的 shell 脚本中,我得到了这些行:
rm tempfl.txt
rm tempfl2.txt
如果这些不存在,我会收到错误消息:
rm: tempfl2.txt: No such file or directory
rm: tempfl.txt: No such file or directory
有没有办法只抑制这些消息,即使它们并不总是出现,因为文件可能存在?
你有两个选择:
禁止rm
警告
$ rm tempfl.txt 2> /dev/null
将脚本输出重定向到/dev/null
$ ./myscript.sh 2> /dev/null
后者的缺点是缺少脚本生成的所有其他警告消息。
正如其他答案所述,您可以使用command 2> /dev/null
丢弃错误输出command
但是这里发生了什么?
>
是用于重定向输出的运算符。2
是对标准错误输出流的引用,即2>
=重定向错误输出。
/dev/null
是“空设备”,它只会吞噬提供给它的任何输入。您可以将两者结合起来以有效地丢弃命令的输出。
完整参考:
> /dev/null
扔掉标准输出1> /dev/null
扔掉标准输出2> /dev/null
扔掉标准错误&> /dev/null
扔掉stdout 和 stderr您应该将所有错误消息重定向到 /dev/null ,例如
rm tempfl2.txt 2> /dev/null
我们可以使用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 等中使用该命令,也许您需要这个。
添加到上面的答案:保留错误消息(如权限被拒绝或类似)可能是一个更好的主意。只需在删除文件之前测试文件是否存在:
[ -f file.txt ] && rm file.txt
这假定了一个类似 Bourne 的 shell,例如 bash。上面还有一个额外的好处,它不会尝试删除目录,这是rm
做不到的。
试试这个命令:
rm -f tempfl.txt
-f 选项的作用如下:
-f, --force ignore nonexistent files, never prompt
如果文件不存在,该命令也不会报告非零错误代码。