如果文件不存在,则 Bash one-liner 以原子方式创建文件

Ram*_*hum 10 files bash

我想要一个 Bash one-liner,如果文件不存在,它会自动创建一个文件。这基本上意味着“如果文件不存在,则创建它”,但要确保没有其他人设法在执行 if 和创建文件之间的小空间中创建文件。

use*_*517 7

从各种评论和 [SO] 链接中窃取答案。似乎有一种符合 POSIX 的方法不涉及mkdir我在下面的原始答案中提到的

set -o noclobber # or set -C
{ > file ; } &> /dev/null
Run Code Online (Sandbox Code Playgroud)

如果文件已存在,则重定向到文件返回 0 或失败并返回非零值。


原答案

您必须使用mkdir- 这是原子性的,要么创建目录,您可以继续,要么不创建,以便您采取适当的操作。

当然,mkdir不会创建文件,但是一旦您知道您对该目录具有独占访问权限,那么您就可以在其中创建您想要的文件。

至于单班轮 - 我会把它留给你。就我个人而言,我会将它写成几行,因为这样更易于维护。