bash - ¿Qué pasó con la variable de entorno TMP?
(6)
FYI - ubuntu (y asumo otras distribuciones basadas en systemd) sí define la variable XDG_RUNTIME_DIR - que es un espacio temporal por usuario, tan poco más seguro que solo / tmp:
$ echo $ XDG_RUNTIME_DIR / run / user / 1000
$ ls -ld $ XDG_RUNTIME_DIR drwx ------ 2 ubuntu ubuntu 40 dic 22 15:18 / correr / usuario / 1000
Creo que XDG_RUNTIME_DIR se mantiene mediante systemd / pam, por lo que no se configurará en Dockers u otros entornos que no sean systemd.
Puedes hacer algo como esto en ~ / .bashrc si quieres:
export TEMP = "$ {XDG_RUNTIME_DIR: - / tmp}"
Consulte: https://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html https://www.freedesktop.org/wiki/
Además, me parecen 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
Siempre escuché que la forma correcta de encontrar la carpeta temporal en una máquina UNIX era mirar la variable de entorno TMP. Cuando escribía un código que funcionaba en Windows y en Linux, revisaba TEMP y TMP.
Hoy, descubrí que mi instalación de Ubuntu no tiene esa variable de entorno.
Sé que parece que siempre puedes contar con / tmp para colocar tus archivos temporales, pero entendí que TMP era la forma en que el usuario podría decirte que guardes los archivos temporales en otro lugar.
¿Sigue siendo el caso?
POSIX / FHS dice que /tmp
es la raíz de los archivos temporales, aunque algunos programas pueden optar por examinar $TEMP
o $TMP
lugar.
Similar a lo que dijo @Chris Lercher, encuentro que esto funciona para mí:
dirname $(mktemp -u -t tmp.XXXXXXXXXX)
Eso no creará realmente un archivo temporal (debido a la marca -u a mktemp) pero le dará el directorio en el que se escribirían los archivos temporales. Este fragmento de código funciona en OSX y Ubuntu (probablemente otros * nix también).
Si desea establecerlo en una variable, haga algo como esto:
TMPDIR=`dirname $(mktemp -u -t tmp.XXXXXXXXXX)`
Una buena forma de crear un directorio temporal es usar mktemp, por ejemplo,
mktemp -d -t
De esta manera, incluso puede asegurarse de que los nombres de sus archivos no coincidirán con los archivos existentes.
Probablemente estás pensando en TMPDIR
.
Esta variable representará la ruta de acceso de un directorio disponible para los programas que necesitan un lugar para crear archivos temporales.
# prompt>
printenv | sort
$ TMP no es declarar (d)
# So, prompt> (i.e. if [ -d /tmp ] is true)
export TMP="/tmp"
export
? Para pasar variables a una subshell.
Además, use $ TMPDIR si está configurado, este es el nombre var correcto para Linux. Y sí, uso el directorio / tmp; Los archivos se eliminarán al menos al reiniciar.!.