题
我总是听说是找一个UNIX机器上的临时文件夹的正确方法是看TMP环境变量。在编写在Windows上工作以及Linux的代码,我会检查TEMP和TMP。
今天,我发现我的Ubuntu安装不具有环境变量都没有。
我知道这似乎你总是可以指望上的/ tmp在那里把你的临时文件,但我明白,TMP的样子,用户可以告诉你把临时文件别的地方。
时仍然如此?
解决方案
您可能会想的 TMPDIR
。
此变量应代表一个目录用于需要的地方创建临时文件的程序提供一个路径。
其他提示
创建临时目录的一个好方法是使用mktemp的,e.g。
mktemp -d -t
这样,你甚至可以保证,你的文件名不会与现有文件相冲突。
POSIX / FHS说/tmp
是临时文件的根,虽然某些程序可以选择检查$TEMP
或$TMP
代替。
什么@克里斯Lercher说,类似的,我觉得这对我的作品:
dirname $(mktemp -u -t tmp.XXXXXXXXXX)
这实际上并不会创建一个临时文件(因为-u标志来mktemp的),但它会给你临时文件将被写入到该目录。这段代码适用于OSX和Ubuntu(可能还有其它的* nix太)。
如果您想将它设置成一个变量,做这样的事情:
TMPDIR=`dirname $(mktemp -u -t tmp.XXXXXXXXXX)`
# prompt>
printenv | sort
$ TMP是不声明(d)
# So, prompt> (i.e. if [ -d /tmp ] is true)
export TMP="/tmp"
export
?为了变量传递到子shell。结果
此外,使用$ TMPDIR如果设置了,这是Linux的正确变数名称的,是的,我不使用/ tmp目录。文件将至少被删除在重新启动!
FYI - Ubuntu的(我假定其他systemd基于发行版)不限定XDG_RUNTIME_DIR变量 - 这是每个用户的临时空间,所以比只/ TMP更安全一点:
$回声$ XDG_RUNTIME_DIR /运行/用户/ 1000
$ LS -ld $ XDG_RUNTIME_DIR drwx ------ 2的ubuntu ubuntu的40年12月22 15点18分/运行/用户/ 1000
我认为XDG_RUNTIME_DIR由systemd / PAM维护,因此它 不会码头工人或其它非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和须藤: https://开头unix.stackexchange.com/questions/346841/why-does-sudo-i-not-set-xdg-runtime-dir-for-the-target-user