J'ai un programme qui stocke ses paramètres dans ~/.config/myprogram
que j'utilise à la fois de manière interactive et avec un système de mise en file d'attente par lots. Lors de l'exécution interactive, je veux que ce programme utilise mes fichiers de configuration (et il le fait). Mais lors de l'exécution en mode batch, les fichiers de configuration ne sont pas nécessaires car je spécifie des options de ligne de commande qui écrasent tous les paramètres pertinents. De plus, l'accès aux fichiers de configuration sur le réseau augmente le temps de démarrage du programme de plusieurs secondes; si les fichiers n'existent pas, le programme se lance beaucoup plus rapidement (car chaque tâche ne prend qu'une minute environ, cela a un impact significatif sur le débit des tâches par lots). Mais parce que j'utilise également le programme de manière interactive, je ne veux pas déplacer / supprimer mes fichiers de configuration tout le temps. Selon le moment où mes travaux par lots sont planifiés sur le cluster (en fonction de l'utilisation des autres utilisateurs),
(En plus: les performances des fichiers réseau sont si lentes, c'est probablement un bogue, mais je ne suis qu'un utilisateur du cluster, donc je ne peux que le contourner, pas le réparer.)
Je pourrais créer une version du programme qui ne lit pas les fichiers de configuration (ou qui n'a pas l'option de ligne de commande pour) pour une utilisation par lots, mais l'environnement de construction de ce programme est mal conçu et difficile à configurer. Je préférerais de loin utiliser les binaires installés via le gestionnaire de packages de mon système.
Comment puis-je tromper des instances particulières de ce programme en prétendant que mes fichiers de configuration n'existent pas (sans modifier le programme)? J'espère un wrapper du formulaire pretendfiledoesntexist ~/.config/myprogram -- myprogram --various-options...
, mais je suis ouvert à d'autres solutions.
LD_PRELOAD
crochet. C'est plus facile (vous pouvez l'implémenter en une heure ou deux, si vous connaissez C) que l'alternative, qui l'est ptrace
. Vous pourriez aussi probablement utiliser fakechroot pour ce faire (qui est LD_PRELOAD, je crois).