मैं सुरक्षित रूप से ksh स्क्रिप्ट के भीतर ksh का संस्करण कैसे प्राप्त कर सकता हूं ?
मैंने निम्नलिखित उपाय देखे हैं :
ksh --versionecho ${.sh.version}echo $KSH_VERSION
और सही परिस्थितियों को देखते हुए, इनमें से प्रत्येक सही ढंग से काम करता है। हालांकि, मैं गैर-परिपूर्ण मामले की परवाह करता हूं।
विशेष रूप से, ऐसी कई मशीनें हैं जिनके साथ मैं काम करता हूं, जिनके पास ksh के पुराने संस्करण हैं, मेरे उद्देश्यों के लिए, कार्यक्षमता में गंभीर कमी है। वैसे भी, मैं संस्करण की जांच करना चाहता हूं (प्रोग्रामिक रूप से) यह देखना है कि क्या ksh संस्करण कम सक्षम संस्करणों में से एक है; और यदि हां, तो मैं कम भयानक कोड वाली एक शाखा को निष्पादित करना चाहता हूं।
हालाँकि, समस्याग्रस्त मशीनों पर, शेल की अशुद्धि संस्करण की जाँच में विस्तारित होती है ...
- अगर मैं कोशिश करता हूं
ksh --version, तो यह कुछ नहीं छापता है और एक नया उदाहरण खोलता हैksh! यदि मैं कोशिश करता हूं
echo ${.sh.version}, तोkshइसे एक वाक्यविन्यास त्रुटि के रूप में माना जाता है जिसे नहीं छोड़ा जा सकता है2> /dev/null।$ echo ${.sh.version} 2> /dev/null ksh: ${.sh.version}: bad substitutionबेशक
echo $KSH_VERSIONठीक काम करने के लिए प्रकट होता है - मेरा मतलब है कि यह दुर्घटना नहीं होगी - हालांकि इन मशीनों पर यह खाली है। इसके अलावा, मैंने कहीं ऐसा देखा जोKSH_VERSIONकेवल द्वारा निर्धारित किया गया होpdksh।
प्रशन:
- मैं
kshप्रोग्रामेटिक रूप से संस्करण को सुरक्षित रूप से कैसे जांच सकता हूं ? यहां मेरे उद्देश्यों के लिए, मुझे वास्तव में परवाह नहीं है कि वास्तविक संस्करण संख्या क्या है, बस यह एक पुराना संस्करण है या नहींksh। - है
$KSH_VERSIONकाफी अच्छा? मेरा मतलब है कि अगर यह रिक्त है, तोkshजरूरी एक पुराना संस्करण है? क्या यह अन्य मंच सही था कि इसे नए संस्करणों के लिए भी सेट नहीं किया जा सकता हैksh? - क्या यह जांचने का कोई तरीका नहीं है?
PS1इस फ़ंक्शन का उपयोग करने के लिए सेट करता हूं । हालाँकि, पुरानी ksh समर्थन नहीं करता $()है PS1। तो अगर यह ksh का एक आधुनिक संस्करण है, तो मैं अपने द्वारा PS1बनाए गए फ़ंक्शन का उपयोग करना चाहता हूं; यदि यह पुराना संस्करण है, तो मैं अभी उपयोग करता हूं $PWD।