У меня есть программа, которая хранит свои настройки в ~/.config/myprogramчто я использую как в интерактивном режиме, так и с системой пакетного обслуживания. При интерактивном запуске я хочу, чтобы эта программа использовала мои файлы конфигурации (и это так). Но при работе в пакетном режиме файлы конфигурации не нужны, потому что я указываю параметры командной строки, которые перезаписывают все соответствующие параметры. Кроме того, доступ к файлам конфигурации по сети увеличивает время запуска программы на несколько секунд; если файлы не существуют, программа запускается намного быстрее (поскольку каждое задание занимает около минуты, это существенно влияет на пропускную способность пакетного задания). Но поскольку я также использую программу в интерактивном режиме, я не хочу постоянно перемещать / удалять свои файлы конфигурации. В зависимости от того, когда мои пакетные задания запланированы в кластере (в зависимости от использования других пользователей),
(Кроме того: производительность сетевых файлов настолько низкая, что, вероятно, является ошибкой, но я всего лишь пользователь кластера, поэтому я могу только обойти его, а не исправлять.)
Я мог бы создать версию программы, которая не считывает файлы конфигурации (или не имеет опции командной строки) для пакетного использования, но среда сборки этой программы плохо спроектирована и сложна в настройке. Я бы предпочел использовать двоичные файлы, установленные через менеджер пакетов моей системы.
Как я могу обмануть отдельные экземпляры этой программы, притворившись, что мои файлы конфигурации не существуют (без изменения программы)? Я надеюсь на обертку формы pretendfiledoesntexist ~/.config/myprogram -- myprogram --various-options..., но я открыт для других решений.
LD_PRELOADхук. Это проще (вы можете реализовать это через час или два, если вы знаете C), чем альтернатива, которая есть ptrace. Вы также можете использовать fakechroot для этого (я думаю, что это LD_PRELOAD).