TMP环境变量发生了什么变化?

问题描述 投票:27回答:6

我总是听说在UNIX机器上找到临时文件夹的正确方法是查看TMP环境变量。在编写适用于Windows和Linux的代码时,我会检查TEMP和TMP。

今天,我发现我的Ubuntu安装根本就没有这个环境变量。

我知道你似乎总是可以依靠/ tmp来存放临时文件,但我知道TMP是用户可以告诉你将临时文件放在其他地方的方式。

那还是这样吗?

bash tmp
6个回答
15
投票

你可能在想TMPDIR

此变量应表示可用于需要创建临时文件的位置的程序的目录的路径名。


11
投票

创建临时目录的好方法是使用mktemp,例如:

mktemp -d -t

这样,您甚至可以确保您的文件名不会与现有文件冲突。


10
投票

POSIX / FHS说/tmp是临时文件的根源,尽管有些程序可能会选择检查$TEMP$TMP


3
投票

与@Chris Lercher所说的类似,我发现这对我有用:

dirname $(mktemp -u -t tmp.XXXXXXXXXX)

这实际上不会创建一个临时文件(因为mktemp的-u标志),但它会为你提供临时文件写入的目录。这个代码片段适用于OSX和Ubuntu(可能还有其他* nix)。

如果要将其设置为变量,请执行以下操作:

TMPDIR=`dirname $(mktemp -u -t tmp.XXXXXXXXXX)`

1
投票
Global variables command.
# prompt>
printenv | sort
$TMP is not declare(d)
# So, prompt> (i.e. if [ -d /tmp ] is true)
export TMP="/tmp"

export?为了将变量传递给子shell。 另外,如果设置了$ TMPDIR,这是Linux的正确var名称。是的,我确实使用/ tmp目录;文件将至少在重新启动时被删除。


0
投票

仅供参考 - ubuntu(我假设其他基于系统的发行版)确实定义了XDG_RUNTIME_DIR变量 - 这是一个每用户的临时空间,所以比/ tmp更安全:

$ echo $ XDG_RUNTIME_DIR / run / user / 1000

$ ls -ld $ XDG_RUNTIME_DIR drwx ------ 2 ubuntu ubuntu 40 Dec 22 15:18 / run / user / 1000

我认为XDG_RUNTIME_DIR是由systemd / pam维护的,所以它不会在Dockers或其他非系统环境中设置。

如果您愿意,可以在〜/ .bashrc中执行以下操作:

export 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

© www.soinside.com 2019 - 2024. All rights reserved.