मैं कैसे निर्धारित करूं कि मेरी पर्ल स्क्रिप्ट को किस स्क्रिप्ट, प्रोग्राम या शैल को निष्पादित किया गया?मैं कैसे पता लगा सकता हूं कि मेरी पर्ल स्क्रिप्ट को किस स्क्रिप्ट, प्रोग्राम या शैल को निष्पादित किया गया है?
उदाहरण: मैं शैल से निष्पादित (प्रत्येक प्रकार के खोल के लिए अनुकूलित) से निष्पादित होने पर मानव पठनीय आउटपुट प्राप्त करना चाहूंगा, एक अलग प्रकार के आउटपुट को अगर किसी अन्य पर्ल स्क्रिप्ट से स्क्रिप्ट के रूप में बुलाया जाता है, और मशीन से पठनीय प्रारूप से निष्पादित किया जा सकता है एक सतत एकीकरण सर्वर जैसे एक कार्यक्रम।
प्रेरणा: मेरे पास एक ऐसा उपकरण है जो इसके आउटपुट को बदलता है जिस पर शेल इसे निष्पादित करता है। मैं सामान्य रूप से इस व्यवहार को स्क्रिप्ट के विकल्प के रूप में कार्यान्वित करता हूं, लेकिन इस टूल का डिज़ाइन विकल्पों की अनुमति नहीं देता है। अन्य गोले में पर्यावरण चर होते हैं जो इंगित करते हैं कि कौन सा खोल चल रहा है। मैं पावरहेल का समर्थन करने के लिए एक पैच पर काम कर रहा हूं, जिसमें कोई विशेष चर नहीं है।
संपादित करें: इनमें से कई उत्तर लिनक्स विशिष्ट होते हैं। असुविधाजनक रूप से, पावरहेल विंडोज के लिए है। getppid
, $ENV{SHELL}
चर, और ps
पर खोलने से इस मामले में मदद नहीं मिलेगी। इस स्क्रिप्ट को क्रॉस-प्लेटफ़ॉर्म चलाने की आवश्यकता है।
मुझे यकीन नहीं है कि मैं समझता हूं - क्या आप उस मामले में मूल प्रक्रिया को नहीं देख रहे हैं? – x0n
आप यह देखने के लिए परीक्षण कर सकते हैं कि क्या STDOUT एक टर्मिनल ('-t') है और यदि ऐसा है, तो मान लें कि आपको निरंतर एकीकरण डिमन के बजाय एक इंटरैक्टिव खोल से बुलाया गया है। हालांकि यह आम तकनीक उत्पादन प्रति-विशिष्ट-माता-पिता को अनुकूलित करने के लिए बात नहीं करती है (लेकिन मुझे लगता है कि यह एक गलत जगह है, वैसे भी)। – pilcrow
उल्लेख करने के लिए भूल गए, आम तौर पर यह एक पर्यावरण परिवर्तनीय दिखता है कि खोल या उपयोगकर्ता यह इंगित करता है कि कौन सा खोल चल रहा है; पावरहेल के साथ, ऐसा कोई पर्यावरण चर नहीं है। –