如何抑制 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 脚本会给出包装/截断/损坏的错误消息? [复制]

WPF下抑制WebBrowser不停弹出各种脚本错误

从 python 运行 sql 脚本时如何仅抑制 SQL*Plus 横幅消息

shell脚本中如何输出标准错误和标准输出

调用 Set-ExecutionPolicy 时如何抑制来自脚本的警告消息