如何抑制 shell 脚本错误消息?
Posted
技术标签:
【中文标题】如何抑制 shell 脚本错误消息?【英文标题】:How do I suppress shell script error messages? 【发布时间】:2013-03-18 17:04:27 【问题描述】:在我的 shell 脚本中,我得到了这些行:
rm tempfl.txt
rm tempfl2.txt
如果这些不存在,我会收到错误消息:
rm: tempfl2.txt: No such file or directory
rm: tempfl.txt: No such file or directory
有没有办法只抑制这些消息,即使它们并不总是出现,因为文件可能存在?
【问题讨论】:
看看这里:***.com/questions/12785533/… 【参考方案1】:你有两个选择:
抑制 rm
警告
$ rm tempfl.txt 2> /dev/null
将脚本输出重定向到/dev/null
$ ./myscript.sh 2> /dev/null
后者的缺点是缺少脚本生成的所有其他警告消息。
【讨论】:
rm -f 应该谨慎使用。【参考方案2】:您应该将所有错误消息重定向到 /dev/null 像
rm tempfl2.txt 2> /dev/null
【讨论】:
【参考方案3】:补充上面的答案:保留错误消息(如权限被拒绝或类似)可能是一个更好的主意。在删除之前测试文件是否存在:
[ -f file.txt ] && rm file.txt
这假设一个像 Bourne 的 shell,例如 bash。以上还有一个额外的好处,它不会尝试删除目录,这是rm
做不到的。
【讨论】:
【参考方案4】:试试这个命令:
rm -f tempfl.txt
-f 选项的作用如下:
-f, --force ignore nonexistent files, never prompt
如果文件不存在,该命令也不会报告非零错误代码。
【讨论】:
您能否为您的答案提供更多解释?【参考方案5】:我们可以使用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 等中使用该命令,也许您需要这个。
【讨论】:
【参考方案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&>1
不同部分实际含义的地方。以上是关于如何抑制 shell 脚本错误消息?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SQL Developer 中的 PLSQL 错误后抑制脚本显示(禁用命令/代码输出)
为啥正确的 shell 脚本会给出包装/截断/损坏的错误消息? [复制]