Uma maneira um pouco mais portátil de lidar com arquivos temporários é usar mktemp
. Ele criará arquivos temporários e retornará seus caminhos para você. Por exemplo:
$ mktemp
/tmp/tmp.zVNygt4o7P
$ ls /tmp/tmp.zVNygt4o7P
/tmp/tmp.zVNygt4o7P
Você pode usá-lo em um script facilmente:
tmpfile=$(mktemp)
echo "Some temp. data..." > $tmpfile
rm $tmpfile
Lendo a página de manual, você poderá definir opções de acordo com suas necessidades. Por exemplo:
-d
cria um diretório em vez de um arquivo.
-u
gera um nome, mas não cria nada.
Usando -u
você pode recuperar o diretório temporário facilmente com ...
$ tmpdir=$(dirname $(mktemp -u))
Mais informações sobre mktemp
estão disponíveis aqui .
Editar sobre o Mac OS X: Eu nunca usei um sistema Mac OSX, mas de acordo com um comentário de Tyilo abaixo, parece que o Mac OSX mktemp
exige que você forneça um modelo (que é um argumento opcional no Linux). Citação:
O modelo pode ser qualquer nome de arquivo com algum número de "Xs" anexado a ele, por exemplo /tmp/temp.XXXX
. Os "Xs" à direita são substituídos pelo número do processo atual e / ou uma combinação de letras exclusiva. O número de nomes de arquivos exclusivos que o mktemp pode retornar depende do número de "Xs" fornecidos; seis "Xs" resultarão no mktemp selecionando 1 de 56800235584 (62 ** 6) nomes de arquivos possíveis.
A página de manual também diz que essa implementação é inspirada na página de manual do OpenBSD mktemp
. Portanto, uma divergência semelhante pode ser observada pelos usuários do OpenBSD e FreeBSD (veja a seção Histórico ).
Agora, como você provavelmente notou, isso exige que você especifique um caminho completo do arquivo, incluindo o diretório temporário que você está procurando na sua pergunta. Este pequeno problema pode ser tratado com o -t
interruptor. Embora essa opção pareça exigir um argumento ( prefix
), parece que se mktemp
baseia $TMPDIR
quando necessário.
Em suma, você deve conseguir o mesmo resultado acima usando ...
$ tmpdir=$(dirname $(mktemp tmp.XXXXXXXXXX -ut))
Qualquer feedback dos usuários do Mac OS X será muito apreciado, pois não consigo testar esta solução.
${TMPDIR-/tmp}
no Unix-likes.TMPDIR
existe (pelo sistema ou administrador ou usuário) para informar quando não usar/tmp
em arquivos temporários.