Eu uso para criar tempfile
, excluir e recriar como um diretório:
tmpnam=`tempfile`
rm -f $tmpnam
mkdir "$tmpnam"
O problema é que outro processo pode ter o mesmo nome X
, se executar acidentalmente o tempfile após um processo rm -f X
e pouco antes mkdir X
.
bash
temporary-directory
Xiè Jìléi
fonte
fonte
mktemp -d -t <prefix>
Para uma solução mais robusta, uso algo como o seguinte. Dessa forma, o diretório temporário sempre será excluído após a saída do script.
A função de limpeza é executada no
EXIT
sinal. Isso garante que a função de limpeza seja sempre chamada, mesmo que o script seja interrompido em algum lugar.Diretório do script bash a partir daqui .
Armadilhas Bash .
fonte
cleanup
irá rm -rf no seu diretório atual!mktemp
falhar,WORK_DIR
estará vazio, o que significa que o comando ficariarm -rf
sem argumento. Não uso FreeBSD, mas eu ficaria muito surpreso serm -rf
foi equivalente arm -rf .
TMPWORKDIR=$(basename 'mktemp -d -p /tmp/git/')
e depois 2rmdir /tmp/git/"${TMPWORKDIR}"
.. Se a variável estiver vazia agora, você ainda retornará/tmp/git/
para o sistema inteiro. Considere algo assim na resposta e eu concordarei com prazer. ;)Minha frase favorita para isso é
fonte
rm $(pwd)
? : Ppushd $(mktemp -d)
...popd
rm -r $(pwd)
rm -r $(pwd)
. Considere a possibilidade de a criação temporária de diretórios falhar por qualquer motivo (talvez o sistema de arquivos / tmp esteja cheio ou tenha sido remontado somente para leitura devido a um erro?); em seguidacd $(mktemp -d)
, avaliarácd
quais alterações no diretório inicial do usuário serão excluídas posteriormente.if pushd $(mktemp -d || echo BADMPDIR); then ........ ; rm -r $(pwd); popd; fi
O seguinte snippet criará com segurança um diretório temporário (
-d
) e armazenará seu nome no diretórioTMPDIR
. (Um exemplo de uso deTMPDIR
variável é mostrado posteriormente no código em que é usado para armazenar arquivos originais que possivelmente serão modificados.)A primeira
trap
linha executa oexit 1
comando quando qualquer um dos sinais especificados é recebido. A segundatrap
linha remove (limpa) a$TMPDIR
saída do programa (normal e anormal). Inicializamos esses traps depois de verificarmos semkdir -d
foi possível executar acidentalmente o trap de saída com$TMPDIR
um estado desconhecido.fonte
-d
verifica se há diretórios. 2.) A terminação já é o padrão para esses sinais.