如果bash脚本中不存在原子创建文件

前端之家收集整理的这篇文章主要介绍了如果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.

猜你在找的Bash相关文章