前端之家收集整理的这篇文章主要介绍了
如果bash脚本中不存在原子创建文件,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在系统
调用open()中,如果我用O_CREAT打开| O_EXCL,系统
调用确保仅在
文件不存在时才创建该
文件.系统
调用保证了原子性.是否有类似的
方法从bash脚本以原子方式创建
文件?
更新:
我发现了两种不同的原子方式
>使用set -o noclobber.然后你可以使用>运算符原子地.
>只需使用mkdir. Mkdir是原子的
100%纯粹的bash
解决方案:
set -o noclobber
{ > file ; } &> /dev/null
如果没有名为file的现有文件,则此命令将创建名为file的文件.如果有一个名为file的文件,则不执行任何操作(但返回非零返回码).
优点与触摸命令:
>如果文件已存在,则不更新时间戳
> 100%bash内置
>按预期返回代码:如果文件已存在或无法创建文件,则失败;如果文件不存在并且已创建,则成功.
缺点:
>需要设置noclobber选项(但是如果您对重定向很小心,或者之后取消设置,那么它在脚本中是可以的).
我想这个解决方案实际上是使用O_CREAT |打开系统调用的bash对应物O_EXCL.