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

时间:2010-03-12 18:58:40

标签: bash tmp

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

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

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

情况仍然如此吗?

6 个答案:

答案 0 :(得分:15)

您可能正在考虑TMPDIR

  

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

答案 1 :(得分:11)

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

mktemp -d -t

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

答案 2 :(得分:10)

POSIX / FHS表示/tmp是临时文件的根,但有些程序可能会选择检查$TEMP$TMP

答案 3 :(得分:3)

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

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

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

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

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

答案 4 :(得分:1)

全局变量命令。
# prompt>
printenv | sort
$ TMP不是声明(d)
# So, prompt> (i.e. if [ -d /tmp ] is true)
export TMP="/tmp"

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

答案 5 :(得分:0)

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

$ echo $ XDG_RUNTIME_DIR /运行/用户/ 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中执行以下操作:

导出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