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?
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.
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.
POSIX / FHS dit que /tmp
est la racine des fichiers temporaires, bien que certains programmes peuvent choisir d'examiner $TEMP
ou $TMP
à la place.
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)`
# 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.!.
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