Muy a menudo, ejecutamos un ejecutable que necesita escribir / leer algunos archivos temporales. Por lo general, creamos un directorio temporal, ejecutamos el ejecutable allí y eliminamos el directorio cuando finaliza el script.
Quiero eliminar el directorio incluso si se mata el ejecutable. Traté de envolverlo en:
#!/bin/bash
dir=$(mktemp -d /tmp/foo.XXXXXXX) && cd $dir && rm -rf $dir
/usr/local/bin/my_binary
Cuando my_binary
muere, el último proceso del núcleo eliminará el directorio, ya que el script es el último proceso que lo contiene inode
; pero no puedo crear ningún archivo en el directorio eliminado.
#!/bin/bash
dir=$(mktemp -d /tmp/foo.XXXXXXX) && cd $dir && rm -rf $dir
touch file.txt
salidas touch: file.txt: No such file or directory
Lo mejor que se me ocurre es eliminar el directorio temporal cuando el proceso muere, capturar las señales más comunes y ejecutar un proceso de limpieza con cron:
#!/bin/bash
dir=$(mktemp -d /tmp/d.XXXXXX) && cd "$dir" || exit 99
trap 'rm -rf "$dir"' EXIT
/usr/local/bin/my_binary
¿Hay alguna manera simple de crear un directorio realmente temporal que se elimine automáticamente cuando el binario actual muere, sin importar qué?
cleanup
se puede ejecutar antes de que se realice el mktemp. Es posible que deseeunset dir
antes de establecer la trampa.