使用 mktemp -d 或 mkdir 创建的目录之间是否存在编程差异?

1 directory mkdir mktemp

我试图理解斯蒂芬基特对这个问题的回答,他用以下代码创建了一个临时目录:

#!/bin/bash

scripttmp=$(mktemp -d) # Create a temporary directory (these will usually be created under /tmp or /var/tmp/)
Run Code Online (Sandbox Code Playgroud)

每次我运行这个命令时,我都会看到一个新的临时目录/tmp/(我不知道它会出现在那里,直到在这里阅读 Roaima 的回答):

IIUC,常规目录和临时目录之间没有编程上的区别(唯一的区别在于如何使用这些目录,即每个目录在机器上停留的时间)。

如果没有程序上的差异,为什么要优先mktemp -d于更小mkdir

Kus*_*nda 6

使用 时mkdir,脚本必须确保它创建的目录名称尚不存在。mkdir dirname如果dirname是当前目录中的现有名称,则使用会出错。

创建临时目录(即不需要比当前脚本的生命周期更长的目录)时,目录的名称通常并不重要,并且mktemp -d会找到一个尚未被其他东西占用的名称。

mktemp -d使创建临时目录更容易、更安全。如果没有mktemp -d,则必须尝试mkdir使用多个名称,直到成功为止。这既不必要地复杂,也可能错误地完成(可能在代码中引入微妙的竞争条件)。

mktemp还为脚本的用户提供了他们希望在何处创建临时目录的控制权。例如,如果脚本产生了大量必须存储在该目录中的临时数据,则用户可以将TMPDIR环境变量(在调用脚本之前或调用脚本时)设置为指向分区上的可写目录,其中有足够的可用空间。mktemp -d然后将在该路径下创建临时目录。

如果TMPDIR未设置,mktemp/tmp在其位置使用。