Joh*_*man 40 shell error-suppression suppress-warnings
在我的shell脚本中,我得到了这些行:
rm tempfl.txt
rm tempfl2.txt
Run Code Online (Sandbox Code Playgroud)
如果这些不存在,我会收到错误消息:
rm: tempfl2.txt: No such file or directory
rm: tempfl.txt: No such file or directory
Run Code Online (Sandbox Code Playgroud)
有没有办法只抑制这些消息,即使它们并不总是出现,因为文件可能存在?
kam*_*uel 61
您有两种选择:
抑制rm警告
$ rm tempfl.txt 2> /dev/null
Run Code Online (Sandbox Code Playgroud)
将脚本输出重定向到 /dev/null
$ ./myscript.sh 2> /dev/null
Run Code Online (Sandbox Code Playgroud)
后者的缺点是缺少脚本生成的所有其他警告消息.
dav*_*wil 18
作为其他答案的状态,您可以command 2> /dev/null用来丢弃来自command
但是,这是怎么回事?
>是用于重定向输出的运算符。2是对标准错误输出流的引用,即2>=重定向错误输出。
/dev/null是“空设备”,仅吞下提供给它的任何输入。您可以将两者结合起来以有效地丢弃命令的输出。
完整参考:
> /dev/null丢掉标准输出1> /dev/null丢掉标准输出2> /dev/null扔掉stderr&> /dev/null丢弃stdout 和 stderrFer*_*ida 10
我们可以使用2> /dev/null来抑制输出错误并|| true确保成功退出状态:
rm foo\n=> rm: cannot remove \xe2\x80\x98foo\xe2\x80\x99: No such file or directory\n\nrm foo 2> /dev/null\necho $?\n=> 1\n\nrm foo 2> /dev/null || true\necho $?\n=> 0\nRun Code Online (Sandbox Code Playgroud)\n\n如果您在 shell 脚本、makefile 等中使用该命令,也许您需要这个。
\n添加到上面的答案中:保留错误消息(例如权限被拒绝等)可能是一个更好的主意。在删除之前测试文件是否存在:
[ -f file.txt ] && rm file.txt
Run Code Online (Sandbox Code Playgroud)
这假设了一个类似 Bourne 的 shell,例如 bash。上面有一个额外的好处,它不会尝试删除目录,有些事情rm不能做。
试试这个命令:
rm -f tempfl.txt
Run Code Online (Sandbox Code Playgroud)
-f选项的行为如下:
-f, --force ignore nonexistent files, never prompt
Run Code Online (Sandbox Code Playgroud)
如果文件不存在,该命令也不会报告非零错误代码.
| 归档时间: |
|
| 查看次数: |
58290 次 |
| 最近记录: |