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,
$TMPDIR
pero 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.TMPDIR
está allí (por el sistema, el administrador o el usuario) para indicarle cuándo no usarlo/tmp
para 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:
-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 ...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 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 semktemp
basa$TMPDIR
cuando 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
gitbash
obtener 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/Temp
oWindows/Temp
como 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
.mktemp
simplemente funciona: simplemktemp
devuelve un archivo ymktemp -d
devuelve 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
$TMPDIR
variable (para sistemas XCU) :También requiere el
/tmp
camino.fuente