加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-15 19:02:08 所属栏目:安全 来源:网络整理
导读:在系统调用open()中,如果我用O_CREAT打开| O_EXCL,系统调用确保仅在文件不存在时才创建该文件.系统调用保证了原子性.是否有类似的方法从bash脚本以原子方式创建文件? 更新: 我发现了两种不同的原子方式 使用set -o noclobber.然后你可以使用运算符原子地.
在系统调用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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读