I want to create a temporary file in POSIX shell (/bin/sh
).
I found out that mktemp(1)
doens't exist on my AIX box, and according to How portable is mktemp(1)?, it isn't that portable and/or secure anyway.
So, what should I use instead ?
I want to create a temporary file in POSIX shell (/bin/sh
).
I found out that mktemp(1)
doens't exist on my AIX box, and according to How portable is mktemp(1)?, it isn't that portable and/or secure anyway.
So, what should I use instead ?
Why not use /dev/random
?
It could be neater with perl but od and awk will do, something like:
tempfile=XXX-$(od -N4 -tu /dev/random | awk 'NR==1 {print $2} {}')
/dev/random
, but it feels so obvious once said :) –
Stoker awk
can be avoided altogether as -An
is portable: tempfile=$(od -An -N4 -tx /dev/urandom); tempfile=XXX-${tempfile## }
–
Tenedos length=7; tempfile=XXX-$(od -An -N${LENGTH} -tx1 /dev/urandom | tr -d ' ')
–
Tenedos [[ $rnd =~ ([[:xdigit:]]+) ]] && rnd=${BASH_REMATCH[1]}
–
Tussock tempfile=$(od -An -N4 -tx /dev/urandom | tr -C -d '[:xdigit:]')
remove all except hex digits. –
Tussock You didn't exactly define "secure", but one element of it is probably to clean up after yourself.
trap "rm -f \"$tmpfile\"" 0 1 2 3 15
You can probably man 3 signal
to see if there are other signals that should cause your temp file to be erased. Signal zero means "on a clean exit".
Got here from google for portable mktemp. My needs are less secure than OP's, so I ended up just using the script's PID:
tempx=/tmp/mytemp.$$
© 2022 - 2024 — McMap. All rights reserved.