Estoy creando archivos temporales a partir de un script bash. Los borro al final del proceso, pero dado que el script se está ejecutando durante bastante tiempo, si lo elimino o simplemente CTRL-C durante la ejecución, los archivos temporales no se eliminan.
¿Hay alguna manera de detectar estos eventos y limpiar los archivos antes de que termine la ejecución?Eliminación de archivos temporales creados en la salida de inicio inesperada
Además, ¿hay algún tipo de práctica recomendada para el nombre y la ubicación de esos archivos temporales?
No estoy seguro actualmente entre el uso de:
TMP1=`mktemp -p /tmp`
TMP2=`mktemp -p /tmp`
...
y
TMP1=/tmp/`basename $0`1.$$
TMP2=/tmp/`basename $0`2.$$
...
O tal vez es que hay algunas soluciones mejores?
Con Bash, 'exec 5 <> $ TMPFILE' vincula el descriptor de archivo 5 a $ TMPFILE como lectura-escritura , y puede usar '<&5', '> & 5', y'/proc/$$/fd/5' (Linux) a partir de entonces. El único problema es que Bash carece de la función 'seek' ... – ephemient
Aceptado tu respuesta ya que el enlace que proporcionaste es lo que explica mejor lo que necesitaba. Gracias – skinp
Un par de notas sobre 'trap': no hay forma de atrapar' SIGKILL' (por diseño, ya que inmediatamente termina la ejecución). Entonces, si eso pudiera suceder, tenga un plan alternativo (como 'tmpreaper'). En segundo lugar, las trampas no son acumulativas: si tiene que realizar más de una acción, todas deben estar en el comando 'trap'. Una forma de hacer frente a múltiples acciones de limpieza es definir una función (y puede redefinirla a medida que avanza el programa, si es necesario) y hacer referencia a eso: 'trap cleanup_function EXIT'. –