#! – आमतौर पर shebang, shabang, hashbang, poundbang उपनाम दिया जाता है – हम इस लेख की अवधि के लिए shebang पर रहेंगे।
यह अनगिनत Linux शेल स्क्रिप्ट की शुरुआत में पाया जाता है – लेकिन वास्तव में यह क्या है? आइए इसे तोड़ते हैं।
यह आमतौर पर ऐसा दिखता है
#!/bin/bash
#! फ़ाइल की शुरुआत में, आमतौर पर पहली पंक्ति पर, एक निष्पादन योग्य के पथ के बाद प्रकट होता है (इस मामले में, bash शेल)।
यह एक टिप्पणी है
यह # से शुरू होता है, इसलिए इसे स्क्रिप्ट के हिस्से के रूप में निष्पादित नहीं किया जाता है – यह क्योंकि प्रभावित करता है कि स्क्रिप्ट कैसे संचालित होती है…
यह एक इंटरप्रेटर निर्देश से पहले आता है
shebang सिस्टम को बताता है कि स्क्रिप्ट को चलाने के लिए किस इंटरप्रेटर का उपयोग करना है, इंटरप्रेटर निष्पादन योग्य का पथ देकर।
- यह आमतौर पर फ़ाइल की शुरुआत में, पहली पंक्ति पर रखा जाता है, ताकि सही इंटरप्रेटर फ़ाइल के बाकी हिस्से को संभाल सके।
- दिया गया पथ एक उपयुक्त निष्पादन योग्य का पूर्ण पथ होना चाहिए
- shebang लाइन में इंटरप्रेटर को पास किए जा सकने वाले विकल्प हो सकते हैं, लेकिन इस पर समर्थन आपके वातावरण के आधार पर भिन्न होता है – केवल एक विकल्प शामिल करना सबसे सुरक्षित है।
उदाहरण
नीचे कुछ #! उदाहरण दिए गए हैं और उनका क्या अर्थ है:
bash
#!/bin/bash
इस लाइन को स्क्रिप्ट की शुरुआत में रखने से सिस्टम को बताया जाएगा कि इसे bash शेल निष्पादन योग्य का उपयोग करके निष्पादित किया जाना चाहिए।
zsh
#!/bin/zsh
इस लाइन को स्क्रिप्ट की शुरुआत में रखने से सिस्टम को बताया जाएगा कि इसे zsh शेल निष्पादन योग्य का उपयोग करके निष्पादित किया जाना चाहिए।
bash और zsh के बीच अंतर पर हमारा लेख यहां पढ़ें!
Python
#!/usr/bin/env python3
स्क्रिप्ट को Python 3 का उपयोग करके निष्पादित करें। ध्यान दें कि यहां python3 निष्पादन योग्य का पथ निर्दिष्ट करने के बजाय, यह लाइन उपयोगकर्ता के वातावरण के लिए वर्तमान में परिभाषित python3 निष्पादन योग्य को ढूंढती है।
कुछ भी नहीं!
#!/bin/false
एक विफलता स्थिति कोड लौटाता है और स्क्रिप्ट निष्पादित नहीं करता। उन स्क्रिप्ट में उपयोग किया जाता है जिन्हें सीधे निष्पादित करने का इरादा नहीं है।
#! को बायपास करना
यदि आप #! वाले स्क्रिप्ट को इस तरह चला रहे हैं:
./myscript.sh
यहां myscript.sh आपके स्क्रिप्ट का नाम है – shebang का उपयोग यह निर्धारित करने के लिए किया जाता है कि किस इंटरप्रेटर का उपयोग करना है।
उपरोक्त केवल उन स्क्रिप्ट पर किया जा सकता है जहां वर्तमान उपयोगकर्ता के पास execute अनुमति है।
हालांकि, यदि आप निम्न करते हैं:
bash myscript.sh
…तो shebang लाइन का उपयोग यह निर्धारित करने के लिए नहीं किया जाता है कि किस इंटरप्रेटर का उपयोग किया जाए, क्योंकि हमने इसे कॉल करने के लिए उपयोग की गई कमांड में bash निर्दिष्ट किया है। स्क्रिप्ट को निष्पादित नहीं किया जा रहा है, bash निष्पादित किया जा रहा है, इसलिए स्क्रिप्ट के लिए केवल पढ़ने की अनुमति आवश्यक है।