Eu tento entender a resposta de Stephen Kitt para essa pergunta onde ele criou um diretório temporário com o seguinte código:
#!/bin/bash
scripttmp=$(mktemp -d) # Create a temporary directory (these will usually be created under /tmp or /var/tmp/)
Cada vez que executo este comando, vejo um novo diretório temporário criado em /tmp/
(eu não sabia que ele aparecerá lá até ler a resposta de Roaima aqui ):
IIUC, não há diferença programática entre um diretório regular para um diretório temporário (a única diferença está na forma como esses diretórios são usados, por meio do tempo que cada um permanece na máquina).
Se não há diferença programática, por que se deve preferir mktemp -d
o mais mínimo mkdir
?
Ao usar
mkdir
, o script teria que se certificar de que cria um diretório com um nome que ainda não existe. Seria um erro usarmkdir dirname
sedirname
fosse um nome existente no diretório atual.Ao criar um diretório temporário (ou seja, um diretório que não é necessário por muito mais tempo do que durante o tempo de vida do script atual), o nome do diretório geralmente não é importante e
mktemp -d
encontrará um nome que ainda não foi usado por outra coisa.mktemp -d
torna mais fácil e seguro criar um diretório temporário. Semmktemp -d
, teria que tentarmkdir
com vários nomes até que um conseguisse. Isso é desnecessariamente complicado e pode ser feito de forma errada (possivelmente introduzindo condições de corrida sutis no código).mktemp
também dá ao usuário do script um pouco de controle sobre onde ele deseja que o diretório temporário seja criado. Se o script, por exemplo, produz uma grande quantidade de dados temporários que precisam ser armazenados nesse diretório, o usuário pode definir aTMPDIR
variável de ambiente (antes ou enquanto invoca o script) para apontar para um diretório gravável em uma partição onde há espaço suficiente disponível.mktemp -d
então criaria o diretório temporário abaixo desse caminho.Se
TMPDIR
não estiver definido,mktemp
usará/tmp
em seu lugar.A coisa com
mktemp -d
uma vez que cria um diretório temporário com um nome aleatório é: Você precisa se lembrar de excluir o diretório depois de usá-lo, se você tiver uma política de exclusão de diretório temporário estrita.É por isso que você escreveu
scripttmp=$(mktemp -d)
para manter o valor. Em geral é fácil de usar.A menos que você não se importe, você pode usar este pequeno exemplo para gerar o nome aleatório e remover a pasta posteriormente:
Bem, há. Com
mkdir
você gera o nome do diretório, e commktemp -d
o sistema cria o diretório para você baseado em/dev/urandom
gettimeofday
,getpid
, ... e outras funções para ganhar a exclusividade do nome.