Qu'est-il arrivé à la variable d'environnement TMP?

j'ai toujours entendu que la bonne façon de trouver le dossier temporaire sur une machine UNIX était de regarder la variable d'environnement TMP. Quand j'écrivais du code qui fonctionnait aussi bien sous Windows que sous Linux, je vérifiais TEMP et TMP.

Aujourd'hui, j'ai découvert que mon installation Ubuntu n'a pas du tout cette variable d'environnement.

je sais qu'il semble que vous pouvez toujours compter sur /tmp étant là pour mettre vos fichiers temporaires, mais j'ai compris que TMP était la façon dont l'utilisateur peut vous dire de mettre les fichiers temporaires ailleurs.

Est-ce toujours le cas?

22
demandé sur boatcoder 2010-03-12 21:58:39

6 réponses

vous pensez probablement TMPDIR .

cette variable doit représenter un chemin d'accès d'un répertoire mis à disposition pour les programmes qui ont besoin d'un endroit pour créer des fichiers temporaires.

12
répondu Alok Singhal 2010-03-12 22:42:55

une bonne façon de créer un répertoire temporaire est d'utiliser mktemp, par exemple

mktemp -d -t

de cette façon, vous pouvez même vous assurer que vos noms de fichiers n'entrent pas en collision avec des fichiers existants.

10
répondu Chris Lercher 2010-03-12 19:18:00

POSIX / FHS dit que /tmp est la racine des fichiers temporaires, bien que certains programmes peuvent choisir d'examiner $TEMP ou $TMP à la place.

9
répondu Ignacio Vazquez-Abrams 2010-03-12 19:06:12

semblable à ce que @Chris Lercher a dit, je trouve que cela fonctionne pour moi:

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

qui ne créera pas de fichier temp (à cause de l'option-u de mktemp) mais vous donnera le répertoire dans lequel les fichiers temp seront écrits. Cet extrait fonctionne sur OSX et Ubuntu (probablement d'autres *nix aussi).

si vous voulez définir une variable, faites quelque chose comme ceci:

TMPDIR=`dirname $(mktemp -u -t tmp.XXXXXXXXXX)`
3
répondu Tom Saleeba 2016-04-08 02:38:55
variables Globales "151940920 de la commande".
# prompt>
printenv | sort
$TMP n'est pas déclarer (d)
# So, prompt> (i.e. if [ -d /tmp ] is true)
export TMP="/tmp"

export ? Afin de passer des variables à un sous-puits.

utilisez aussi $TMPDIR si défini, c'est le nom var correct pour Linux. Et Oui, j'utilise le répertoire /tmp; les fichiers seront supprimés au moins sur redémarrer.!.

1
répondu JimmyLandStudios.com 2016-04-03 20:19:35

FYI-ubuntu (et je suppose que d'autres distributions basées sur systemd) définit la variable XDG_RUNTIME_DIR - qui est un espace temp per-user, donc peu plus sûr que just / tmp:

$ echo $XDG_RUNTIME_DIR /run/user / 1000

$ ls -ld $XDG_RUNTIME_DIR drwx------ 2 ubuntu ubuntu 40 22 Décembre à 15:18 /run/user/1000

je pense que XDG_RUNTIME_DIR est maintenu par systemd / pam, donc il ne sera pas installé dans les Dockers ou autres non-systemd environnement.

Vous pouvez faire quelque chose comme cela dans ~/.bashrc si vous aimez:

export TEMP= "${XDG_RUNTIME_DIR: - / tmp} "

voir: https://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html https://www.freedesktop.org/wiki /

aussi - il me semble qu'il y a quelques mises en garde avec XDG_RUNTIME_DIR et sudo: https://unix.stackexchange.com/questions/346841/why-does-sudo-i-not-set-xdg-runtime-dir-for-the-target-user

0
répondu Reuben 2017-12-22 15:52:28