我总是听说在UNIX机器上找到临时文件夹的正确方法是查看TMP环境变量。当编写在Windows和Linux上工作的代码时,我会检查TEMP和TMP。TMP环境变量发生了什么变化?
今天,我发现我的Ubuntu安装根本没有那个环境变量。
我知道你总是可以依靠/ tmp来存放你的临时文件,但我知道TMP是用户可以告诉你把临时文件放在其他地方的方式。
那还是这样吗?
我总是听说在UNIX机器上找到临时文件夹的正确方法是查看TMP环境变量。当编写在Windows和Linux上工作的代码时,我会检查TEMP和TMP。TMP环境变量发生了什么变化?
今天,我发现我的Ubuntu安装根本没有那个环境变量。
我知道你总是可以依靠/ tmp来存放你的临时文件,但我知道TMP是用户可以告诉你把临时文件放在其他地方的方式。
那还是这样吗?
POSIX/FHS表示/tmp
是临时文件的根目录,尽管有些程序可能会选择检查$TEMP
或$TMP
。
http://www.pathname.com/fhs/pub/fhs-2.3.html#TMPTEMPORARYFILES – 2010-03-12 19:12:33
创建临时目录的好方法是使用mktemp,例如,
mktemp -d -t
这样,您甚至可以确保您的文件名不会与现有文件发生冲突。
这是一个很好的答案,但它不是对上述问题的回答。 – 2013-07-17 07:11:48
# prompt>
printenv | sort
$ TMP是不是
声明(d)
# So, prompt> (i.e. if [ -d /tmp ] is true)
export TMP="/tmp"
export
?为了将变量传递给子shell。
另外,使用$ TMPDIR如果设置,这是Linux的正确var名称。是的,我使用/ tmp目录;至少在重启后文件将被删除。
什么@克里斯Lercher说,类似的,我觉得这对我的作品:
dirname $(mktemp -u -t tmp.XXXXXXXXXX)
这实际上并不会创建一个临时文件(因为-u标志,mktemp的),但它会为您提供临时文件将被写入的目录。这段代码适用于OSX和Ubuntu(也可能是其他* nix)。
如果你想将它设置成一个变量,做这样的事情:
TMPDIR=`dirname $(mktemp -u -t tmp.XXXXXXXXXX)`
或简单地说:'dirname $(mktemp -u)'。 – ekhumoro 2016-12-28 20:40:38
仅供参考 - Ubuntu的(我假设其他systemd基于发行版),并定义XDG_RUNTIME_DIR变量 - 这是每个用户临时空间,所以很少不仅仅是/ tmp目录更安全:
$回声$ XDG_RUNTIME_DIR /运行/用户/ 1000
$ LS -ld $ XDG_RUNTIME_DIR drwx ------ 2 Ubuntu的Ubuntu的40月22 15:18/run/user/1000
我认为XDG_RUNTIME_DIR是由systemd/pam维护的,因此它不会在Dockers或其他非systemd环境中设置为 。
你可以做这样的事情在〜/ .bashrc如果你喜欢:
出口TEMP = “$ {XDG_RUNTIME_DIR: -/tmp目录}”
参见: https://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html https://www.freedesktop.org/wiki/
另外 - 在我看来有一些与XDG_RUNTIME_DIR和sudo的警告: https://unix.stackexchange.com/questions/346841/why-does-sudo-i-not-set-xdg-runtime-dir-for-the-target-user
这是如何过于本地化?我敢肯定,不止一些人在Linux中使用临时文件。 – Cascabel 2010-03-12 19:09:07