Não é fácil.
Você pode obter um arquivo temporário (excluído) e ter um fd aberto nele:
exec 3<<EOF
whatever
EOF
Mas você não pode escrever mais tarde e não há nenhum comando que possa fazer você seek
voltar em um fd.
Você pode tentar implementá-lo manualmente:
mktemp() (
prefix=$1
i=0; suffix=
set -C
until
file=$prefix$suffix
error=$({ : > "$file"; } 2>&1)
do
if [ ! -e "$file" ] && [ ! -L "$file" ]; then
# that probably failed for another reason than noclobber. Give up.
printf >&2 'Cannot create "%s": %s\n' "$file" "$error"
return 1
fi
i=$(($i + 1))
suffix=.$i
done
printf '%s\n' "$file"
)
Se você quiser alguma aleatoriedade no nome do arquivo, awk
tem rand()
, que você pode usar com printf("%c")
.
O melhor é evitar arquivos temporários, se possível. Tenha em mente que a limpeza deles é quase tão dolorosa quanto a criação deles.