Tengo un programa que almacena su configuración en ~/.config/myprogram
que uso tanto interactivamente como con un sistema de colas por lotes. Cuando se ejecuta de forma interactiva, quiero que este programa use mis archivos de configuración (y lo hace). Pero cuando se ejecuta en modo por lotes, los archivos de configuración no son necesarios porque especifico las opciones de línea de comandos que sobrescriben todas las configuraciones relevantes. Además, acceder a los archivos de configuración a través de la red aumenta el tiempo de inicio del programa en varios segundos; Si los archivos no existen, el programa se inicia mucho más rápido (ya que cada trabajo solo toma aproximadamente un minuto, esto tiene un impacto significativo en el rendimiento del trabajo por lotes). Pero debido a que también uso el programa de manera interactiva, no quiero mover / eliminar mis archivos de configuración todo el tiempo. Dependiendo de cuándo se programan mis trabajos por lotes en el clúster (según el uso de otros usuarios),
(Aparte: el rendimiento del archivo de red es tan lento que probablemente sea un error, pero solo soy un usuario del clúster, por lo que solo puedo solucionarlo, no solucionarlo).
Podría construir una versión del programa que no lea los archivos de configuración (o que no tenga una opción de línea de comandos) para el uso por lotes, pero el entorno de compilación de este programa está mal diseñado y es difícil de configurar. Preferiría usar los binarios instalados a través del administrador de paquetes de mi sistema.
¿Cómo puedo engañar a instancias particulares de este programa para fingir que mis archivos de configuración no existen (sin modificar el programa)? Espero un contenedor del formulario pretendfiledoesntexist ~/.config/myprogram -- myprogram --various-options...
, pero estoy abierto a otras soluciones.
LD_PRELOAD
gancho. Eso es más fácil (puede implementar eso en una hora o dos, si conoce C) que la alternativa, que es ptrace
. Probablemente también podría usar fakechroot para hacer esto (que es LD_PRELOAD, creo).