在我的shell脚本中,我得到了这些内容:
rm tempfl.txt
rm tempfl2.txt
如果这些不存在,我会收到错误消息:
rm: tempfl2.txt: No such file or directory
rm: tempfl.txt: No such file or directory
是否有办法仅抑制这些消息,即使它们并不总是出现,因为文件可能存在?
答案 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等中使用该命令,可能需要这个。