我试图理解 Stephen Kitt 对这个问题的回答,他用以下代码创建了一个临时目录:
#!/bin/bash
scripttmp=$(mktemp -d) # Create a temporary directory (these will usually be created under /tmp or /var/tmp/)
每次我运行这个命令时,我都会看到一个新的临时目录创建在下面/tmp/
(我不知道它会出现在那里,直到在这里阅读 Roaima 的答案):
IIUC,常规目录与临时目录之间没有编程差异(唯一的区别在于这些目录的使用方式,通过每个目录停留在机器上的时间)。
如果没有程序上的差异,为什么要更喜欢mktemp -d
最小的mkdir
呢?
使用
mkdir
时,脚本必须确保它创建一个名称尚不存在的目录。mkdir dirname
如果dirname
是当前目录中的现有名称,则使用将是错误的。当创建一个临时目录(即一个在当前脚本的生命周期内不需要的目录)时,目录的名称通常并不重要,并且
mktemp -d
会找到一个尚未被其他东西占用的名称。mktemp -d
使创建临时目录更容易、更安全。如果没有mktemp -d
,则必须尝试mkdir
使用多个名称,直到其中一个成功。这既不必要地复杂,也可能做错(可能在代码中引入微妙的竞争条件)。mktemp
还为脚本用户提供了一些控制权,他们希望在哪里创建临时目录。例如,如果脚本产生大量临时数据,必须存储在该目录中,则用户可以将TMPDIR
环境变量(在调用脚本之前或调用脚本时)设置为指向分区上的可写目录,其中有足够的可用空间。mktemp -d
然后将在该路径下创建临时目录。如果
TMPDIR
未设置,mktemp
将/tmp
在其位置使用。因为它会创建一个具有
mktemp -d
随机名称的临时目录,所以要记住:如果您有严格的临时目录删除策略,请记住在使用该目录后删除该目录。这就是为什么你写信
scripttmp=$(mktemp -d)
来保存价值。一般来说,它很容易使用。除非您不在乎,否则您可以使用这个小示例生成随机名称并稍后删除该文件夹:
嗯,有。随
mkdir
你生成目录名,mktemp -d
系统根据/dev/urandom
gettimeofday
,getpid
, ... 等函数为你创建目录,获得名称唯一性。