Una forma un poco más portátil de manejar archivos temporales es usar mktemp
. Creará archivos temporales y devolverá sus rutas por usted. Por ejemplo:
$ mktemp
/tmp/tmp.zVNygt4o7P
$ ls /tmp/tmp.zVNygt4o7P
/tmp/tmp.zVNygt4o7P
Podrías usarlo en un script con bastante facilidad:
tmpfile=$(mktemp)
echo "Some temp. data..." > $tmpfile
rm $tmpfile
Al leer la página de manual, debería poder configurar las opciones según sus necesidades. Por ejemplo:
-d
crea un directorio en lugar de un archivo.
-u
genera un nombre, pero no crea nada.
Utilizando -u
podría recuperar el directorio temporal con bastante facilidad con ...
$ tmpdir=$(dirname $(mktemp -u))
Más información sobre mktemp
está disponible aquí .
Editar con respecto a Mac OS X: nunca he usado un sistema Mac OSX, pero según un comentario de Tyilo a continuación, parece que Mac OSX mktemp
requiere que proporciones una plantilla (que es un argumento opcional en Linux). Citando:
La plantilla puede ser cualquier nombre de archivo con algún número de "X" adjuntas, por ejemplo /tmp/temp.XXXX
. Las "X" finales se reemplazan con el número de proceso actual y / o una combinación de letras única. El número de nombres de archivo únicos que puede devolver mktemp depende del número de "X" proporcionadas; seis "X" darán como resultado que mktemp seleccione 1 de 56800235584 (62 ** 6) posibles nombres de archivo.
La página de manual también dice que esta implementación está inspirada en la página de manual de OpenBSD mktemp
. Por lo tanto, los usuarios de OpenBSD y FreeBSD también podrían observar una divergencia similar (consulte la sección Historial ).
Ahora, como probablemente notó, esto requiere que especifique una ruta de archivo completa, incluido el directorio temporal que está buscando en su pregunta. Este pequeño problema se puede manejar con el -t
interruptor. Si bien esta opción parece requerir un argumento ( prefix
), parece que se mktemp
basa $TMPDIR
cuando es necesario.
Con todo, debería poder obtener el mismo resultado que el anterior utilizando ...
$ tmpdir=$(dirname $(mktemp tmp.XXXXXXXXXX -ut))
Cualquier comentario de los usuarios de Mac OS X sería muy apreciado, ya que no puedo probar esta solución yo mismo.
${TMPDIR-/tmp}
en Me gusta de Unix.TMPDIR
está allí (por el sistema, el administrador o el usuario) para indicarle cuándo no usarlo/tmp
para archivos temporales.