2012-04-19 5 views
7

Quiero crear un archivo temporal en shell POSIX (/bin/sh).¿Cómo crear un archivo temporal con shell portátil de forma segura?

Descubrí que mktemp(1) no existe en mi caja AIX, y de acuerdo con How portable is mktemp(1)?, de todos modos no es portátil ni seguro.

Entonces, ¿qué debería usar en su lugar?

+0

Pertenece en unix.SE. – l0b0

+0

Bueno, no es una cuestión de administrador de sistemas, sino una _codificación_ (ya sea en el shell de Unix). –

+0

¿Qué tipo de seguridad necesita en este archivo temporal? Eso afecta lo que puedes usar. –

Respuesta

8

¿Por qué no utilizar /dev/random?

Podría ser más limpio con el Perl, pero desde awk y va a hacer, algo así como:

tempfile=XXX-$(od -N4 -tu /dev/random | awk 'NR==1 {print $2} {}') 
+0

Eso es exactamente lo que estaba buscando (seguro y POSIX). No pensé en '/ dev/random', pero se siente tan obvio una vez dicho :) –

+0

Para casi todos los propósitos/dev/urandom es preferible. Ver https://unix.stackexchange.com/a/324210/197479. Usar hex es más corto. Probado en AIX6.1: tempfile = XXX - $ (od -N4 -tx/dev/urandom | awk 'NR == 1 {print $ 2} {}') – Ted

3

Usted no define exactamente "seguro", pero un elemento de la misma es probable que limpiar después de ti mismo.

trap "rm -f \"$tmpfile\"" 0 1 2 3 15 

Puede probablemente man 3 signal para ver si hay otras señales que deberían hacer que el archivo temporal que desea borrar. Signal zero significa "en una salida limpia".

+1

+1 por el uso demasiado frecuente de 'trap' . –

0

Conseguido aquí de google para mktemp portátil. Mis necesidades son menos seguros que OP, así que terminaron simplemente usando PID de la secuencia de comandos:

tempx=/tmp/mytemp.$$ 
Cuestiones relacionadas