Domanda

Ho sempre sentito dire che il modo corretto per trovare la cartella temporanea su una macchina UNIX è stato quello di esaminare la variabile di ambiente TMP. Quando si scrive il codice che ha lavorato su Windows così come Linux, vorrei verificare per TEMP e TMP.

Oggi, ho scoperto che la mia installazione di Ubuntu non ha che variabile di ambiente a tutti.

So che sembra si può sempre contare su / tmp essere lì per mettere i file temporanei, ma ho capito che TMP era il modo in cui l'utente potrebbe dirvi di mettere i file temporanei da qualche altra parte.

E 'ancora il caso?

È stato utile?

Soluzione

Probabilmente state pensando di TMPDIR .

  

Questa variabile deve rappresentare un percorso di una directory messo a disposizione per i programmi che hanno bisogno di un posto per creare i file temporanei.

Altri suggerimenti

Un buon modo per creare una directory temporanea sta usando mktemp, per es.

mktemp -d -t

In questo modo, si può anche fare in modo che i nomi di file non si scontrerà con i file esistenti.

POSIX / FHS dice che /tmp è la radice per i file temporanei, anche se alcuni programmi possono decidere di esaminare $TEMP o $TMP posto.

Simile a quello che ha detto @ Chris Lercher, trovo che questo funziona per me:

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

Non sarà effettivamente creare un file temporaneo (a causa della bandiera -u per mktemp), ma vi darà la directory che file temporanei sarebbero stati scritti. Questo frammento di codice funziona su OSX e Ubuntu (probabilmente altri * nix troppo).

Se si desidera impostare in una variabile, fare qualcosa di simile:

TMPDIR=`dirname $(mktemp -u -t tmp.XXXXXXXXXX)`
Le variabili globali di comando.
# prompt>
printenv | sort
$ TMP non è dichiarare (d)
# So, prompt> (i.e. if [ -d /tmp ] is true)
export TMP="/tmp"

export? Per passare variabili ad una subshell.
Inoltre, utilizzare $ TMPDIR se impostato, questo è il nome var corretto per Linux E sì, io uso la directory / tmp.; i file saranno cancellati almeno al riavvio.!.

A proposito - ubuntu (e presumo altre distribuzioni basate systemd) non definire la variabile XDG_RUNTIME_DIR - che è uno spazio temporaneo per utente, in modo da po 'più sicuro di un semplice / tmp:

$ echo $ XDG_RUNTIME_DIR / Eseguire / user / 1000

$ ls -ld $ XDG_RUNTIME_DIR drwx ------ 2 ubuntu ubuntu 40 dic 22 15:18 / run / user / 1000

Credo XDG_RUNTIME_DIR è mantenuto da systemd / pam, in modo da Non sarà impostato in Dockers o in altri ambienti non systemd.

Si può fare qualcosa di simile in ~ / .bashrc se ti piace:

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

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

Inoltre - non mi sembra che alcuni avvertimenti con XDG_RUNTIME_DIR e sudo: https: // unix.stackexchange.com/questions/346841/why-does-sudo-i-not-set-xdg-runtime-dir-for-the-target-user

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top