No caso de um arquivo temporário, seu exemplo na pergunta o criaria, depois o desvinculará do diretório (fazendo com que ele "desapareça") e, quando o script fechar o filodescriptor (provavelmente após a rescisão), o espaço ocupado pelo arquivo seria recuperável pelo sistema. Esta é uma maneira comum de lidar com arquivos temporários em idiomas como C.
É, até onde eu sei, não é possível abrir um diretório da mesma maneira, pelo menos de forma alguma que torne o diretório utilizável.
Uma maneira comum de excluir arquivos e diretórios temporários no encerramento de um script é instalando uma limpeza EXIT
trap. Os exemplos de código fornecidos abaixo evitam ter que manipular completamente os descritores de arquivo.
tmpdir=$(mktemp -d)
tmpfile=$(mktemp)
trap 'rm -f "$tmpfile"; rm -rf "$tmpdir"' EXIT
# The rest of the script goes here.
Ou você pode chamar uma função de limpeza:
cleanup () {
rm -f "$tmpfile"
rm -rf "$tmpdir"
}
tmpdir=$(mktemp -d)
tmpfile=$(mktemp)
trap cleanup EXIT
# The rest of the script goes here.
O EXIT
trap não será executado ao receber o sinal KILL
(que não pode ser interceptado), o que significa que não haverá limpeza executada. No entanto, ele será executado ao terminar devido a um sinal INT
ou TERM
(se estiver executando com bash
ou ksh
, em outros shells você pode adicionar esses sinais após EXIT
na linha de comando trap
), ou ao sair normalmente devido a chegar ao final do script ou executar uma chamada exit
.