Pregunta

Siempre oí que la forma correcta de encontrar la carpeta temporal en una máquina UNIX era mirar la variable de entorno TMP. Al escribir código que funcionaba en Windows, así como Linux, me gustaría comprobar para TEMP y TMP.

Hoy en día, descubrí que mi instalación de Ubuntu no tiene esa variable de entorno en absoluto.

Sé que parece que siempre puede contar en / tmp estar allí para poner sus archivos temporales, pero entendí que TMP fue la forma en que el usuario podría decir que se ponga los archivos temporales en otro lugar.

¿Sigue siendo el caso?

¿Fue útil?

Solución

Usted probablemente está pensando en TMPDIR .

  

Esta variable representa un nombre de ruta de un directorio disponible para programas que necesitan un lugar para crear archivos temporales.

Otros consejos

Una buena manera de crear un directorio temporal está utilizando mktemp, por ejemplo.

mktemp -d -t

De esta manera, se puede incluso asegurarse de que los nombres de archivo no chocarán con los archivos existentes.

POSIX / FHS establece que /tmp es la raíz para los archivos temporales, aunque algunos programas pueden optar por examinar $TEMP o $TMP lugar.

Al igual que lo que dijo @ Chris Lercher, me parece que esto funciona para mí:

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

Eso no va a crear realmente un archivo temporal (a causa de la bandera -u para mktemp) pero voy a dar el directorio de archivos temporales que se escriben en. Este fragmento de código funciona en OSX y Ubuntu (probablemente otros * nix también).

Si desea establecer en una variable, hacer algo como esto:

TMPDIR=`dirname $(mktemp -u -t tmp.XXXXXXXXXX)`
Las variables globales de comandos.
# prompt>
printenv | sort
$ TMP no es declarar (d)
# So, prompt> (i.e. if [ -d /tmp ] is true)
export TMP="/tmp"

export? Con el fin de pasar variables a un subnivel.
También, el uso $ TMPDIR si está establecido, este es el nombre correcto para Linux var Y sí, yo uso el directorio / tmp.; archivos se eliminarán al menos en el reinicio.!.

FYI - ubuntu (y supongo que otras distribuciones basadas systemd) no definir la variable XDG_RUNTIME_DIR - que es un espacio temp por usuario, por lo que poco más seguro que simplemente / tmp:

$ echo $ XDG_RUNTIME_DIR / Run / usuario / 1000

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

Creo que es mantenida por XDG_RUNTIME_DIR systemd / pam, por lo que no se encuentra en los cargadores de muelle u otros entornos no systemd.

Se puede hacer algo como esto en ~ / .bashrc si quieres:

TEMP exportación = "$ {XDG_RUNTIME_DIR: - / tmp}"

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

También - me parece que hay algunas advertencias con XDG_RUNTIME_DIR y sudo: https: // unix.stackexchange.com/questions/346841/why-does-sudo-i-not-set-xdg-runtime-dir-for-the-target-user

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top