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