我试图理解斯蒂芬基特对这个问题的回答,他用以下代码创建了一个临时目录:
#!/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
?
使用 时mkdir
,脚本必须确保它创建的目录名称尚不存在。mkdir dirname
如果dirname
是当前目录中的现有名称,则使用会出错。
创建临时目录(即不需要比当前脚本的生命周期更长的目录)时,目录的名称通常并不重要,并且mktemp -d
会找到一个尚未被其他东西占用的名称。
mktemp -d
使创建临时目录更容易、更安全。如果没有mktemp -d
,则必须尝试mkdir
使用多个名称,直到成功为止。这既不必要地复杂,也可能错误地完成(可能在代码中引入微妙的竞争条件)。
mktemp
还为脚本的用户提供了他们希望在何处创建临时目录的控制权。例如,如果脚本产生了大量必须存储在该目录中的临时数据,则用户可以将TMPDIR
环境变量(在调用脚本之前或调用脚本时)设置为指向分区上的可写目录,其中有足够的可用空间。mktemp -d
然后将在该路径下创建临时目录。
如果TMPDIR
未设置,mktemp
将/tmp
在其位置使用。