मेरे पास एक प्रोग्राम है जो अपनी सेटिंग्स को स्टोर करता है ~/.config/myprogram
मैं अंतःक्रियात्मक रूप से और बैच पंक्तिबद्ध प्रणाली के साथ दोनों का उपयोग करता हूं। अंतःक्रियात्मक रूप से चलने पर, मैं चाहता हूं कि यह प्रोग्राम मेरी कॉन्फ़िगरेशन फ़ाइलों का उपयोग करे (और यह करता है)। लेकिन जब बैच मोड में चल रहा है, तो विन्यास फाइल आवश्यक नहीं है क्योंकि मैं कमांड लाइन विकल्प निर्दिष्ट करता हूं जो सभी प्रासंगिक सेटिंग्स को अधिलेखित करता है। इसके अलावा, नेटवर्क पर कॉन्फ़िगरेशन फ़ाइलों तक पहुँचने से प्रोग्राम का स्टार्टअप समय कई सेकंड बढ़ जाता है; यदि फ़ाइलें मौजूद नहीं हैं, तो प्रोग्राम बहुत तेज़ी से लॉन्च होता है (जैसा कि प्रत्येक कार्य में केवल एक मिनट लगता है, यह बैच जॉब विवादास्पद पर महत्वपूर्ण प्रभाव डालता है)। लेकिन क्योंकि मैं भी कार्यक्रम का उपयोग अंतःक्रियात्मक रूप से करता हूं, मैं हर समय अपनी कॉन्फ़िगरेशन फ़ाइलों को स्थानांतरित / हटाना नहीं चाहता। इस बात पर निर्भर करता है कि कब मेरे बैच की नौकरियां क्लस्टर पर आधारित होंगी (अन्य उपयोगकर्ताओं के उपयोग के आधार पर),
(इसके अलावा: नेटवर्क फ़ाइल का प्रदर्शन इतना धीमा है कि शायद एक बग है, लेकिन मैं सिर्फ क्लस्टर का एक उपयोगकर्ता हूं, इसलिए मैं केवल इसके चारों ओर काम कर सकता हूं, इसे ठीक नहीं कर सकता।)
मैं प्रोग्राम के एक संस्करण का निर्माण कर सकता हूं जो बैच उपयोग के लिए कॉन्फ़िगरेशन फ़ाइलों (या कमांड-लाइन विकल्प नहीं है) को नहीं पढ़ता है, लेकिन इस प्रोग्राम का बिल्ड वातावरण खराब-इंजीनियर है और सेट करना मुश्किल है। मैं अपने सिस्टम के पैकेज मैनेजर के माध्यम से स्थापित बायनेरिज़ का उपयोग करना पसंद करूंगा।
मैं इस कार्यक्रम के विशेष उदाहरणों को कैसे अपनी कॉन्फ़िगरेशन फ़ाइलों के बहाने में बदल सकता हूं (कार्यक्रम को संशोधित किए बिना) मौजूद नहीं है? मैं फॉर्म के रैपर के लिए उम्मीद कर रहा हूं pretendfiledoesntexist ~/.config/myprogram -- myprogram --various-options...
, लेकिन मैं अन्य समाधानों के लिए तैयार हूं।
LD_PRELOAD
हुक का उपयोग कर सकते हैं । यह आसान है (आप इसे लागू कर सकते हैं एक या दो घंटे में, यदि आप सी जानते हैं) विकल्प की तुलना में, जो है ptrace
। आप शायद ऐसा करने के लिए नकलीचोट का उपयोग कर सकते हैं (जो LD_PRELOAD है, मेरा मानना है)।