我想写一个shell脚本,它检查某个文件archived_sensor_data.json
是否存在,如果存在,就删除它。在http://www.cyberciti.biz/tips/find-out-if-file-exists-with-conditional-expressions.html之后,我尝试了以下操作:
[-e archived_sensor_data.json] && rm archived_sensor_data.json
但是,这会引发错误
[-e: command not found
当我尝试使用./test_controller
命令运行生成的test_controller
脚本时。代码有什么问题?
7条答案
按热度按时间kmpatx3s1#
括号和
-e
之间缺少必需的空格:jjhzyzn02#
以下是使用
ls
的替代方法:如果你想隐藏
ls
的任何输出,以便只看到yes或no,请将stdout
和stderr
重定向到/dev/null
:hec6srdp3#
我的解决方案建议的背景是一个朋友的故事,他在第一份工作的第二周就清理了一半的构建服务器。所以基本的任务是找出一个文件是否存在,如果存在,让我们删除它。但这条河上有几处险要的急流
请考虑以下场景:
我们有要删除的文件:文件存在。json
此文件名存储在变量中
我们也有一个路径变量,使事情真正灵活
让我们看看
-e
是否做了它应该做的事情。文件是否存在?是的。魔法。
但是,如果文件变量不小心被求值为nuffin,会发生什么呢
什么?它应该返回一个错误。这就是整个文件夹被意外删除的故事的开始
另一种方法是专门测试我们所理解的“文件”
所以文件存在。..
所以这不是一个文件,也许,我们不想删除整个目录
man test
有以下说法:xkftehaa4#
在内部,rm命令必须测试文件是否存在
那为什么还要增加一项测试呢刚发行
在那之后它就会消失不管它是否存在。
使用rm-f是你不想任何关于不存在的文件的消息。
如果您需要在文件不存在的情况下采取一些措施,那么您必须自己进行测试。根据您的示例代码,本示例中并非如此。
o4hqfura5#
如果您使用的是NFS,“test”是一个更好的解决方案,因为您可以在NFS关闭时添加超时:
“[ -e my_file ]”构造将冻结,直到NFS再次正常工作:
2w3kk1z56#
也可以使用
stat
:在一条不存在的路径上,你会得到:
xkftehaa7#