Experimente o comando mktemp.
Os arquivos criados por mktemp serão exclusivos dentro do diretório que os contém.
#!/bin/bash
FILENAME=$(mktemp)
echo "Writing out data to $FILENAME"
echo "This is a test" > $FILENAME
rm $FILENAME
Para erros, considere escrever os erros para "Erro padrão":
#!/bin/bash
echo "Everything is fine.."
sleep 1
echo "Oh dear. An error happened" 1>&2
exit
Dessa forma, você pode redirecionar seus erros de script para um arquivo.
$ ./myscript 2>/tmp/errors
Como alternativa, envie seus registros para um servidor syslog local usando o comando "logger".
#!/bin/bash
echo "Everything is fine.."
sleep 1
logger -t "MyApp" "Oh dear. An error happened"
exit
[Editado com mais informações em resposta ao comentário: "Mas eu preciso saber como criar um arquivo temporário com nome previsível como" temp_file.test ", porque isso eu quero usar no meu programa"]
mktemp pode ajudar você lá também. Se você precisa que o arquivo tenha um formato específico, você pode fazer algo como:
$ FILENAME=$(mktemp --tmpdir=/tmp temp_file-XXXXXXXXXX.txt)
$ echo $FILENAME
/tmp/temp_file-HIitKZc0MT.txt
Eu recomendaria não usar nomes de arquivos temporários em diretórios acessíveis ao público (por exemplo: sempre usando "/tmp/MyTempFile.txt") - a menos que você seja muito cuidadoso, é razoavelmente fácil para um invasor fazer algo desagradável e problemas para o seu script - por exemplo:
ln -s /etc/passwd /tmp/MyTempFile.txt
(run your application)
ou (dependendo do que você está usando o arquivo para):
chmod 444 /tmp/MyFile.txt
echo "evil sql command perhaps" > /tmp/MyFile.txt