web-dev-qa-db-fra.com

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

J'ai toujours entendu dire que la bonne façon de trouver le dossier temporaire sur un ordinateur UNIX était d'examiner la variable d'environnement TMP. Lors de la rédaction de code fonctionnant sous Windows et Linux, je vérifiais si TEMP et TMP étaient compatibles.

Aujourd'hui, j'ai découvert que mon installation Ubuntu ne comportait pas cette variable d'environnement.

Je sais qu'il semble que vous puissiez toujours compter sur/tmp pour stocker vos fichiers temporaires, mais j'ai compris que TMP était la méthode par laquelle l'utilisateur pouvait vous dire de placer les fichiers temporaires ailleurs.

Est-ce toujours le cas?

24
boatcoder

Vous pensez probablement à TMPDIR .

Cette variable doit représenter le chemin d'un répertoire mis à la disposition des programmes ayant besoin d'un emplacement pour créer des fichiers temporaires.

14
Alok Singhal

Un bon moyen de créer un répertoire temporaire consiste à utiliser mktemp, par exemple.

mktemp -d -t

De cette façon, vous pouvez même vous assurer que vos noms de fichiers ne seront pas en conflit avec les fichiers existants.

10
Chris Lercher

POSIX/FHS indique que /tmp est la racine des fichiers temporaires, bien que certains programmes puissent choisir d’examiner plutôt $TEMP ou $TMP.

9

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

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

Cela ne créera pas réellement de fichier temporaire (à cause de l'option -u dans mktemp), mais cela vous donnera le répertoire dans lequel les fichiers temporaires seraient écrits. Cet extrait fonctionne sur OSX et Ubuntu (probablement aussi avec * nix aussi).

Si vous souhaitez le définir dans une variable, procédez comme suit:

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

FYI - ubuntu (et je suppose que d’autres distributions systemd) définit la variable XDG_RUNTIME_DIR - qui est un espace temporaire par utilisateur, donc un peu plus sûr que/tmp:

$ echo $ XDG_RUNTIME_DIR /run/user/1000

$ ls -ld $ XDG_RUNTIME_DIR drwx ------ 2 ubuntu ubuntu 40 déc. 22 15:18/run/user/1000

Je pense que XDG_RUNTIME_DIR est maintenu par systemd/pam, donc il Ne sera pas défini dans les dockers ou autres environnements non-systemd.

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

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

Voir: https://standards.freedesktop.org/basedir-spec/basedir-spec-latest.htmlhttps: //www.freedesktop. org/wiki/

Aussi - il me semble que XDG_RUNTIME_DIR et Sudo ont quelques réserves: https://unix.stackexchange.com/questions/346841/why-does-Sudo-i-not-set-xdg-runtime -dir-for-the-target-user

0
Reuben