Ho un programma in cui sono memorizzate le sue impostazioni ~/.config/myprogram
che utilizzo sia in modo interattivo che con un sistema di accodamento batch. Quando corro in modo interattivo, voglio che questo programma usi i miei file di configurazione (e lo fa). Ma quando si esegue in modalità batch, i file di configurazione non sono necessari perché specifico le opzioni della riga di comando che sovrascrivono tutte le impostazioni pertinenti. Inoltre, l'accesso ai file di configurazione sulla rete aumenta il tempo di avvio del programma di alcuni secondi; se i file non esistono, il programma si avvia molto più velocemente (poiché ogni processo richiede solo circa un minuto, ciò ha un impatto significativo sulla velocità di elaborazione dei processi batch). Ma poiché utilizzo anche il programma in modo interattivo, non voglio spostare / eliminare i miei file di configurazione in ogni momento. A seconda di quando i miei lavori batch vengono programmati sul cluster (in base all'utilizzo di altri utenti),
(A parte: che le prestazioni dei file di rete sono così lente è probabilmente un bug, ma sono solo un utente del cluster, quindi posso solo aggirarlo, non risolverlo.)
Potrei costruire una versione del programma che non legge i file di configurazione (o ha un'opzione da riga di comando per non farlo) per l'uso in batch, ma l'ambiente di costruzione di questo programma è scarsamente ingegnerizzato e difficile da configurare. Preferirei di gran lunga usare i binari installati tramite il gestore dei pacchetti del mio sistema.
Come posso ingannare particolari istanze di questo programma fingendo che i miei file di configurazione non esistano (senza modificare il programma)? Spero in un wrapper del modulo pretendfiledoesntexist ~/.config/myprogram -- myprogram --various-options...
, ma sono aperto ad altre soluzioni.
LD_PRELOAD
hook. È più facile (puoi implementarlo in un'ora o due, se conosci C) rispetto all'alternativa, che è ptrace
. Probabilmente potresti anche usare fakechroot per farlo (che è LD_PRELOAD, credo).