जब आप टाइप
./program
खोल यह कैसे निर्धारित करता है फ़ाइल निष्पादित करने की आवश्यकता के अनुसार कार्यक्रम पर अमल करने की कोशिश करता है। यदि यह एक बाइनरी है, तो यह एंट्री सबराउटिन निष्पादित करने का प्रयास करेगा। खोल का पता लगाता है यह एक स्क्रिप्ट,
#!/bin/sh
या
#!/bin/awk
या अधिक सामान्यतः
#!/path/to/interpreter
के उपयोग के माध्यम जैसे खोल फ़ाइल पारित करेंगे (और किसी भी आपूर्ति तर्क है) आपूर्ति किए गए दुभाषिया के लिए तर्क के रूप में, जो तब स्क्रिप्ट निष्पादित करेगा। यदि पथ में दिया गया दुभाषिया मौजूद नहीं है, तो खोल त्रुटि होगी, और यदि कोई दुभाषिया रेखा नहीं मिलती है, तो खोल मान ली जाएगी कि आपूर्ति की गई स्क्रिप्ट स्वयं ही निष्पादित की जाएगी।
एक कमांड
sh program
./program
के बराबर है जब कार्यक्रम की पहली पंक्ति यह सोचते हैं कि/bin/श अपने रास्ते में श (है
#!/bin/sh
शामिल यह उदाहरण के लिए/system/bin/sh हो सकता है)। शॉन को बाइनरी पास करने से शेल स्क्रिप्ट के रूप में इसका इलाज किया जा सकता है, जो यह नहीं है, और बाइनरी व्याख्यात्मक खोल नहीं है (जो सादा पाठ है)। यही कारण है कि आप इस संदर्भ में
sh program
का उपयोग नहीं कर सकते हैं। कार्यक्रम के कारण यह भी असफल हो जाएगा कि रूबी, अजीब, sed, या कुछ और जो शैल स्क्रिप्ट नहीं है।
यह #!/Bin/sh नहीं होना चाहिए? – Protostome