Mam program, w którym są przechowywane jego ustawienia ~/.config/myprogramktórego używam zarówno interaktywnie, jak i z systemem kolejkowania wsadowego. Podczas działania interaktywnego chcę, aby ten program używał moich plików konfiguracyjnych (i robi to). Ale podczas pracy w trybie wsadowym pliki konfiguracyjne nie są konieczne, ponieważ określam opcje wiersza polecenia, które zastępują wszystkie odpowiednie ustawienia. Ponadto dostęp do plików konfiguracyjnych przez sieć wydłuża czas uruchamiania programu o kilka sekund; jeśli pliki nie istnieją, program uruchamia się znacznie szybciej (ponieważ każde zadanie zajmuje tylko około minuty, ma to znaczący wpływ na przepustowość zadań wsadowych). Ponieważ jednak korzystam z programu interaktywnie, nie chcę cały czas przenosić / usuwać plików konfiguracyjnych. W zależności od tego, kiedy moje zadania wsadowe zostaną zaplanowane w klastrze (na podstawie wykorzystania przez innych użytkowników),
(Poza tym: wydajność pliku sieciowego jest tak niska, prawdopodobnie jest to błąd, ale jestem tylko użytkownikiem klastra, więc mogę tylko go obejść, a nie naprawić).
Mógłbym zbudować wersję programu, która nie odczytuje plików konfiguracyjnych (lub ma opcję wiersza poleceń, aby tego nie robić) do użycia wsadowego, ale środowisko kompilacji tego programu jest źle zaprojektowane i trudne do skonfigurowania. Wolałbym używać plików binarnych zainstalowanych za pomocą menedżera pakietów mojego systemu.
Jak mogę oszukać poszczególne instancje tego programu, aby udawać, że moje pliki konfiguracyjne nie istnieją (bez modyfikacji programu)? Mam nadzieję na opakowanie formularza pretendfiledoesntexist ~/.config/myprogram -- myprogram --various-options..., ale jestem otwarty na inne rozwiązania.
LD_PRELOADhaka. To łatwiejsze (możesz to zaimplementować za godzinę lub dwie, jeśli znasz C) niż alternatywa, którą jest ptrace. Prawdopodobnie możesz też użyć do tego fakechroot (jak sądzę, LD_PRELOAD).