处理临时文件的一种更便携式的方法是使用mktemp
。它将创建临时文件并为您返回它们的路径。例如:
$ mktemp
/tmp/tmp.zVNygt4o7P
$ ls /tmp/tmp.zVNygt4o7P
/tmp/tmp.zVNygt4o7P
您可以很容易地在脚本中使用它:
tmpfile=$(mktemp)
echo "Some temp. data..." > $tmpfile
rm $tmpfile
阅读手册页,您应该能够根据需要设置选项。例如:
-d
创建目录而不是文件。
-u
生成一个名称,但不创建任何内容。
使用... -u
可以很容易地检索临时目录。
$ tmpdir=$(dirname $(mktemp -u))
有关更多信息,mktemp
请参见此处。
关于Mac OS X的编辑:我从未使用过Mac OSX系统,但是根据下面Tyilo的评论,看来Mac OSX mktemp
要求您提供模板(这是Linux上的可选参数)。报价:
模板可以是任何文件名,例如,后接一些“ X” /tmp/temp.XXXX
。尾随的“ X”将替换为当前的过程编号和/或唯一的字母组合。mktemp可以返回的唯一文件名的数量取决于所提供的“ Xs”的数量。六个“ X”将导致mktemp选择56800235584(62 ** 6)可能的文件名中的1个。
手册页还说此实现是受OpenBSD手册页的启发mktemp
。因此,OpenBSD和FreeBSD用户也可能会观察到类似的差异(请参阅“ 历史记录”部分)。
现在,您可能已经注意到,这需要您指定完整的文件路径,包括您要在问题中查找的临时目录。使用-t
开关可以解决这个小问题。尽管此选项似乎需要一个参数(prefix
),但它似乎在必要时mktemp
依赖$TMPDIR
。
总而言之,使用...您应该能够获得与上述相同的结果。
$ tmpdir=$(dirname $(mktemp tmp.XXXXXXXXXX -ut))
Mac OS X用户的任何反馈将不胜感激,因为我无法自己测试此解决方案。
${TMPDIR-/tmp}
在类Unix上使用即可。TMPDIR
(由系统,管理员或用户)在那里告诉您什么时候不使用/tmp
临时文件。