Eu tenho um programa que armazena suas configurações em ~/.config/myprogram
que eu uso interativamente e com um sistema de enfileiramento em lote. Ao executar interativamente, desejo que este programa use meus arquivos de configuração (e é o que faz). Mas, quando executados no modo em lote, os arquivos de configuração não são necessários porque eu especifico opções de linha de comando que substituem todas as configurações relevantes. Além disso, o acesso aos arquivos de configuração pela rede aumenta o tempo de inicialização do programa em vários segundos; se os arquivos não existirem, o programa será iniciado muito mais rapidamente (como cada trabalho leva apenas cerca de um minuto, isso tem um impacto significativo no rendimento do trabalho em lotes). Mas como também uso o programa interativamente, não quero mover / excluir meus arquivos de configuração o tempo todo. Dependendo de quando meus trabalhos em lotes são agendados no cluster (com base no uso de outros usuários),
(Além disso: o desempenho do arquivo de rede é tão lento provavelmente é um bug, mas eu sou apenas um usuário do cluster, então só posso contorná-lo, não corrigi-lo.)
Eu poderia criar uma versão do programa que não lê os arquivos de configuração (ou não tem uma opção de linha de comando) para uso em lote, mas o ambiente de compilação desse programa é mal projetado e difícil de configurar. Eu preferiria usar os binários instalados através do gerenciador de pacotes do meu sistema.
Como enganar instâncias específicas deste programa para fingir que meus arquivos de configuração não existem (sem modificar o programa)? Espero um invólucro do formulário pretendfiledoesntexist ~/.config/myprogram -- myprogram --various-options...
, mas estou aberto a outras soluções.
LD_PRELOAD
gancho. Isso é mais fácil (você pode implementar isso em uma hora ou duas, se souber C) do que a alternativa, que é ptrace
. Você provavelmente também poderia usar o fakechroot para fazer isso (que é LD_PRELOAD, acredito).