Question

J'ai toujours entendu dire que la bonne façon de trouver le dossier temporaire sur une machine UNIX était de consulter la variable d'environnement TMP.Lors de l'écriture de code fonctionnant sous Windows et Linux, je vérifiais TEMP et TMP.

Aujourd'hui, j'ai découvert que mon installation Ubuntu ne possède pas du tout cette variable d'environnement.

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

Est-ce toujours le cas?

Était-ce utile?

La solution

Vous pensez probablement TMPDIR .

  

Cette variable représente un chemin d'un répertoire mis à la disposition des programmes qui ont besoin d'un endroit pour créer des fichiers temporaires.

Autres conseils

Une bonne façon de créer un répertoire temporaire utilise mktemp, par exemple.

mktemp -d -t

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

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

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'indicateur -u de mktemp), mais cela vous donnera le répertoire dans lequel les fichiers temporaires seront écrits.Cet extrait fonctionne sur OSX et Ubuntu (probablement d'autres * nix aussi).

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

TMPDIR=`dirname $(mktemp -u -t tmp.XXXXXXXXXX)`
Les variables globales commande .
# prompt>
printenv | sort
$ TMP 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-shell.
En outre, utiliser TMPDIR $ si elle est définie, c'est le nom var correct pour Linux Et oui, j'utiliser le répertoire / tmp. les fichiers seront supprimés au moins au redémarrage.!.

Pour votre information - ubuntu (et je suppose que d'autres distros à base systemd) ne définit la variable XDG_RUNTIME_DIR - qui est un espace temporaire par utilisateur, si peu plus sûr qu'un simple / tmp:

$ echo $ XDG_RUNTIME_DIR / Run / user / 1000

$ ls -ld $ XDG_RUNTIME_DIR drwx ------ 2 ubuntu ubuntu 40 22 décembre 15h18 / run / user / 1000

Je pense que XDG_RUNTIME_DIR est maintenue par systemd / pam, il ne sera pas mis en Dockers ou d'autres environnements non systemd.

Vous pouvez faire quelque chose comme ça dans ~ / .bashrc si vous le souhaitez:

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

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

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top