Tengo un script que necesita crear archivos temporales para su trabajo, y limpiar después de sí mismo. Mi pregunta es acerca de encontrar el directorio base correcto para los archivos temporales.
El script debe funcionar en múltiples plataformas: Git Bash (Windows), Solaris, Linux, OSX. En cada plataforma, el directorio temporal preferido se expresa de manera diferente:
- Windows:
%TMP%(y posiblemente%TEMP%) - OSX:
$TMPDIR - Linux, UNIX: se supone que es,
$TMPDIRpero parece no estar configurado en varios sistemas que probé
Entonces, en mi script, agregué este repetitivo:
if test -d "$TMPDIR"; then
:
elif test -d "$TMP"; then
TMPDIR=$TMP
elif test -d /var/tmp; then
TMPDIR=/var/tmp
else
TMPDIR=/tmp
fi
Esto parece demasiado tedioso. ¿Hay una mejor manera?
shell-script
directory
tmp
Detener el daño continuo a Mónica
fuente
fuente

${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.Respuestas:
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:Podrías usarlo en un script con bastante facilidad:
Al leer la página de manual, debería poder configurar las opciones según sus necesidades. Por ejemplo:
-dcrea un directorio en lugar de un archivo.-ugenera un nombre, pero no crea nada.Utilizando
-upodría recuperar el directorio temporal con bastante facilidad con ...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 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 semktempbasa$TMPDIRcuando es necesario.Con todo, debería poder obtener el mismo resultado que el anterior utilizando ...
Cualquier comentario de los usuarios de Mac OS X sería muy apreciado, ya que no puedo probar esta solución yo mismo.
fuente
gitbashobtener una interfaz de shell, de ahí mi "levemente". Realmente no podría decir dónde están almacenados los archivos temporales en un sistema Windows ...c:\User\Name\..............\stuff. Y probablemente hay 100 de ellos. Aún así, algunas distribuciones de Linux se están acercando al mismo nivel de locura/var. Solo tenía curiosidad. Me pareció una forma extraña de decirlo todo: en mi experiencia, la frustración es muy portátil, y la conveniencia no lo es tanto. Muy buena respuesta de todos modos.WINDOWS/TempoWindows/Tempcomo el directorio predeterminado para sus archivos temporales; ese directorio también existe en máquinas con Windows 7. Pero mi script permite al usuario proporcionar un directorio temporal alternativo en la línea de comando.mktemp.mktempsimplemente funciona: simplemktempdevuelve un archivo ymktemp -ddevuelve un directorio; No se requieren plantillas. Sin embargo, el manual no se actualiza.Si está buscando lo mismo en menos líneas ...
Podrías escribir esto en uno.
fuente
Usted puede hacer:
El shell debe encontrar un directorio ejecutable en una de las 4 alternativas o salir con un error significativo. Aún así, POSIX define la
$TMPDIRvariable (para sistemas XCU) :También requiere el
/tmpcamino.fuente