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 -upodría recuperar el directorio temporal con bastante facilidad con ...
$ tmpdir=$(dirname $(mktemp -u))
Más información sobre mktempestá 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 mktemprequiere 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 -tinterruptor. Si bien esta opción parece requerir un argumento ( prefix), parece que se mktempbasa $TMPDIRcuando 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.TMPDIRestá allí (por el sistema, el administrador o el usuario) para indicarle cuándo no usarlo/tmppara archivos temporales.