संबंधित: कौन सा शेल दुभाषिया एक स्क्रिप्ट चलाता है जिसमें कोई शेबंग नहीं है?
स्क्रिप्ट में एक शबंग / हैशबैंग / #!
लाइन नहीं है, बस इसलिए कि डबल डैश नहीं है #!
।
हालांकि, स्क्रिप्ट को एक शेल द्वारा निष्पादित किया जाएगा (लिंक किए गए प्रश्न और उत्तरों के ऊपर देखें), और उस शेल में, यदि -
फ़ंक्शन नाम में एक वैध चरित्र है, तो लाइन शेल फ़ंक्शन को घोषित करती है जिसे --
कुछ भी नहीं कहा जाता है (ठीक है, यह चलता है :
,) जो कुछ नहीं करता है ) और जिसे कभी नहीं बुलाया जाता है।
फ़ंक्शन, अधिक सामान्य बहु-पंक्ति संकेतन में (बस इसे और अधिक स्पष्ट करने के लिए कि यह कैसा दिखता है, जैसा कि इसका विषम नाम थोरा इस तथ्य को अस्पष्ट करता है कि यह वास्तव में एक फ़ंक्शन है):
-- () {
:
}
फ़ंक्शन परिभाषा का एकमात्र उद्देश्य एक पंक्ति है जो एक शेल स्क्रिप्ट में मान्य है और एक ही समय में एक वैध SQL कमांड (एक टिप्पणी) है। इस तरह के कोड को पॉलीग्लॉट कहा जाता है ।
बोगस शेल फ़ंक्शन को घोषित करने के बाद, स्क्रिप्ट जब शेल स्क्रिप्ट दुभाषिया द्वारा निष्पादित की जाती है, exec
तो चालू शेल को चलाने के परिणामस्वरूप होने वाली प्रक्रिया के साथ बदल देती है db2 -txf "$0"
, जो db2 -txf
कमांड लाइन से स्क्रिप्ट के पथनाम का उपयोग करने के समान होगा ।
यह तरकीब शायद उन प्रणालियों पर मज़बूती से काम नहीं करेगी जहाँ dash
या अन्य- ash
आधारित शेल, yash
बोर्न शेल, ksh88
या के ksh93
रूप में उपयोग किया जाता है /bin/sh
, क्योंकि ये शेल उन कार्यों को स्वीकार नहीं करते हैं जिनके नाम में डैश होते हैं।
यह भी संबंधित:
मुझे लगता है कि निम्नलिखित भी काम करेगा (वास्तव में परीक्षण नहीं):
--() { exec db2 -txf "$0"; }; --