2012-04-19 6 views
7

Voglio creare un file temporaneo nella shell POSIX (/bin/sh).Come creare un file temporaneo con shell portatile in modo sicuro?

Ho scoperto che il numero mktemp(1) non esiste nella mia casella AIX e in base a How portable is mktemp(1)?, non è comunque portatile e/o sicuro.

Quindi, cosa dovrei usare invece?

+0

Appartiene a unix.SE. – l0b0

+0

Bene, non è una domanda di amministratore di sistema, ma una di _coding_ (sia nella shell unix). –

+0

Che tipo di sicurezza avete bisogno su questo file temporaneo? Ciò influenza ciò che puoi usare. –

risposta

8

Perché non utilizzare /dev/random?

Potrebbe essere più ordinato con perl, ma da e awk farà, qualcosa di simile:

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

Questo è _exactly_ quello che stavo cercando (sicuro e POSIX). Non ho pensato a '/ dev/random', ma sembra ovvio una volta detto :) –

+0

Per quasi tutti gli scopi/dev/urandom è preferibile. Vedi https://unix.stackexchange.com/a/324210/197479. L'utilizzo di hex è più breve. Testato su AIX6.1: tempfile = XXX - $ (od -N4 -tx/dev/urandom | awk 'NR == 1 {print $ 2} {}') – Ted

3

Non avrebbe definito esattamente "sicura", ma un elemento di essa è probabilmente quello di pulire dopo te stesso.

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

Probabilmente si può man 3 signal per vedere se ci sono altri segnali che dovrebbero causare il file temporaneo da cancellare. Il segnale zero significa "su un'uscita pulita".

+1

+1 per l'uso troppo spesso trascurato di 'trap' . –

0

Ottenuto da google per mktemp portatile. Le mie esigenze sono meno sicure di quelle dell'OP, quindi ho finito con l'utilizzo del PID dello script:

tempx=/tmp/mytemp.$$ 
Problemi correlati