33

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

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

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

还是这样吗?

4

6 回答 6

21

你大概在想TMPDIR

这个变量应该代表一个目录的路径名,该路径名可用于需要一个地方来创建临时文件的程序。

于 2010-03-12T22:42:55.693 回答
13

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

mktemp -d -t

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

于 2010-03-12T19:18:00.537 回答
12

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

于 2010-03-12T19:06:12.850 回答
5

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

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

这实际上不会创建临时文件(因为 mktemp 的 -u 标志),但它会为您提供临时文件将被写入的目录。此代码段适用于 OSX 和 Ubuntu(也可能是其他 *nix)。

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

TMPDIR=`dirname $(mktemp -u -t tmp.XXXXXXXXXX)`
于 2016-04-08T02:38:55.057 回答
1
全局变量命令。[有用]
# Let's look at environment variable's
printenv | sort
# search for TMP var
printenv | grep TMP
$TMP 未声明,因为它是$TMPDIR [答案]
## [ -d /tmp ] && echo 'is true' 
export TMP='/tmp' # In order to pass variables to a subshell.

使用 $TMPDIR ,这是 Linux 的正确 var 名称。 注意:/tmp 目录内容(文件)将在关机/重启时被删除,这应该是预期的/期望的。

于 2016-04-03T19:47:16.140 回答
0

仅供参考 - ubuntu(我假设其他基于 systemd 的发行版)确实定义了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 维护,因此不会在 Docker 或其他非 systemd 环境中设置。

如果你愿意,你可以这样做~/.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 -用户

于 2017-12-22T15:52:28.260 回答