Frequentemente, executamos um executável que precisa gravar / ler alguns arquivos temporários. Geralmente criamos um diretório temporário, executamos o executável lá e excluímos o diretório quando o script é concluído.
Eu quero excluir o diretório mesmo que o executável seja morto. Eu tentei envolvê-lo em:
#!/bin/bash
dir=$(mktemp -d /tmp/foo.XXXXXXX) && cd $dir && rm -rf $dir
/usr/local/bin/my_binary
Quando my_binarymorrer, o último processo em que o kernel excluirá o diretório, pois o script é o último processo que o mantém inode; mas não consigo criar nenhum arquivo no diretório excluído.
#!/bin/bash
dir=$(mktemp -d /tmp/foo.XXXXXXX) && cd $dir && rm -rf $dir
touch file.txt
saídas touch: file.txt: No such file or directory
O melhor que pude descobrir é excluir o diretório temp quando o processo morrer, captando os sinais mais comuns e executar um processo de limpeza com o cron:
#!/bin/bash
dir=$(mktemp -d /tmp/d.XXXXXX) && cd "$dir" || exit 99
trap 'rm -rf "$dir"' EXIT
/usr/local/bin/my_binary
Existe alguma maneira simples de criar um diretório realmente temporário que é excluído automaticamente quando o binário atual morre, não importa o quê?
cleanuppode ser executada antes que o mktemp esteja pronto. Você pode quererunset dirantes de montar a armadilha.