जवाबों:
एक गैर-निष्पादन योग्य shस्क्रिप्ट चलाने के लिए , उपयोग करें:
sh myscript
एक गैर-निष्पादन योग्य bashस्क्रिप्ट चलाने के लिए , उपयोग करें:
bash myscript
एक निष्पादन योग्य शुरू करने के लिए (जो निष्पादन योग्य अनुमति के साथ कोई फ़ाइल है); आप इसे इसके मार्ग से निर्दिष्ट करें:
/foo/bar
/bin/bar
./bar
स्क्रिप्ट को निष्पादन योग्य बनाने के लिए, उसे आवश्यक अनुमति दें:
chmod +x bar
./bar
जब कोई फ़ाइल निष्पादन योग्य होती है, तो कर्नेल यह पता लगाने के लिए ज़िम्मेदार होता है कि इसे कैसे एक्सपेक्ट किया जाए। गैर-बायनेरिज़ के लिए, यह फ़ाइल की पहली पंक्ति को देखकर किया जाता है। इसमें एक होना चाहिए hashbang:
#! /usr/bin/env bash
हैशबैंग कर्नेल को बताता है कि किस प्रोग्राम को चलाना है (इस मामले में कमांड /usr/bin/envको तर्क के साथ चलाया जाता है bash)। फिर, स्क्रिप्ट को प्रोग्राम में पास किया जाता है (दूसरे तर्क के रूप में) सभी तर्कों के साथ आपने स्क्रिप्ट को बाद के तर्कों के रूप में दिया।
इसका मतलब है कि हर स्क्रिप्ट जो निष्पादन योग्य है, उसमें एक हैशबैंग होना चाहिए । यदि ऐसा नहीं होता है, तो आप कर्नेल को यह नहीं बता रहे हैं कि यह क्या है , और इसलिए कर्नेल को यह पता नहीं है कि इसे व्याख्या करने के लिए किस प्रोग्राम का उपयोग करना है। यह हो सकता है bash, perl, python, sh, या कुछ और। (वास्तव में, कर्नेल अक्सर उपयोगकर्ता के डिफ़ॉल्ट शेल का उपयोग फ़ाइल की व्याख्या करने के लिए करेगा, जो बहुत खतरनाक है क्योंकि यह बिल्कुल सही दुभाषिया नहीं हो सकता है या यह इसके कुछ पार्स करने में सक्षम हो सकता है लेकिन सूक्ष्म व्यवहार अंतर जैसे shऔर bash) के बीच का मामला ।
/usr/bin/envआमतौर पर, आप हैश बैंग्स को ऐसे देखेंगे:
#!/bin/bash
नतीजा यह है कि कर्नेल /bin/bashस्क्रिप्ट की व्याख्या करने के लिए कार्यक्रम चलाएगा । दुर्भाग्य से, bashहमेशा डिफ़ॉल्ट रूप से शिप नहीं किया जाता है, और यह हमेशा उपलब्ध नहीं होता है /bin। लिनक्स मशीनों पर यह आम तौर पर होता है, अन्य POSIX मशीनों की एक श्रृंखला होती है, जहां bashविभिन्न स्थानों में जहाज होते हैं, जैसे कि /usr/xpg/bin/bashया/usr/local/bin/bash ।
पोर्टेबल बैश स्क्रिप्ट लिखने के लिए, हम इसलिए bashप्रोग्राम के स्थान को हार्ड-कोडिंग पर भरोसा नहीं कर सकते हैं । POSIX में पहले से ही उस से निपटने के लिए एक तंत्र है PATH:। विचार यह है कि आप अपने कार्यक्रमों को उन निर्देशिकाओं में से एक में स्थापित करते हैं जो अंदर हैंPATH और सिस्टम को आपके कार्यक्रम को खोजने में सक्षम होना चाहिए जब आप इसे नाम से चलाना चाहते हैं।
अफसोस की बात है, आप ऐसा नहीं कर सकते :
#!bash
कर्नेल आपके लिए कुछ PATHखोज नहीं करेगा । एक कार्यक्रम है जो आपके लिए एक PATHखोज कर सकता है , हालांकि, इसे कहा जाता है env। सौभाग्य से, लगभग सभी प्रणालियों में एक envकार्यक्रम स्थापित किया गया है /usr/bin। तो हम envएक हार्डकोड मार्ग का उपयोग करना शुरू करते हैं, जो तब PATHखोज करता है bashऔर इसे चलाता है ताकि यह आपकी स्क्रिप्ट की व्याख्या कर सके:
#!/usr/bin/env bash
इस दृष्टिकोण में एक नकारात्मक पहलू है: POSIX के अनुसार, हैशबैंग में एक तर्क हो सकता है । इस मामले में, हम प्रोग्राम bashके तर्क के रूप में उपयोग करते हैं env। इसका मतलब है कि हमारे पास तर्कों को पारित करने के लिए कोई जगह नहीं बची है bash। इसलिए #!/bin/bash -exuइस योजना में कुछ बदलने का कोई तरीका नहीं है । आपको set -exuइसके बजाय हैशबैंग के बाद रखना होगा।
इस दृष्टिकोण का एक और फायदा भी है: कुछ सिस्टम के साथ जहाज हो सकता है /bin/bash, लेकिन उपयोगकर्ता को यह पसंद नहीं आ सकता है, यह बगिया या पुराना लग सकता है, और हो सकता है कि उसने अपना खुद का स्थापित किया bashहो। यह अक्सर ओएस एक्स (मैक) पर होता है, जहां ऐप्पल एक पुराना जहाज बनाता है /bin/bashऔर उपयोगकर्ता /usr/local/bin/bashहोमब्रे जैसे कुछ का उपयोग करके अप-टू-डेट स्थापित करते हैं। जब आप उस envदृष्टिकोण का उपयोग करते हैं जो एक PATHखोज करता है , तो आप उपयोगकर्ता की प्राथमिकता को ध्यान में रखते हैं और उसके द्वारा भेजे गए सिस्टम पर पसंदीदा बैश का उपयोग करते हैं।
zshअपने शेल के रूप में उपयोग करता हूं, तो क्या मैं उपयोग करूंगा hashbang #! /usr/bin/env zsh?
#! /usr/bin/env zshयदि (और केवल यदि) स्क्रिप्ट के अंदर कोड Z शेल द्वारा निष्पादित किया जाना चाहिए।
बोर्न शेल के लिए:
sh myscript.sh
बैश के लिए:
bash myscript.sh
यदि आप स्क्रिप्ट को वर्तमान शेल में चलाना चाहते हैं (जैसे आप चाहते हैं कि यह आपकी निर्देशिका या वातावरण को प्रभावित करने में सक्षम हो) तो आपको कहना चाहिए:
. /path/to/script.sh
या
source /path/to/script.sh
/path/to/script.shउदाहरण के लिए, वर्तमान निर्देशिका के तहत निर्देशिका में . bin/script.shचलने वाले नोट नोट कर सकते हैं ।script.shbin
सबसे पहले, निष्पादन की अनुमति दें: -
chmod +x script_name
sh script_namebash script_name./script_nameनोट : -आप जाँच कर सकते हैं कि क्या फ़ाइल निष्पादन योग्य है या नहीं 'ls -a' का उपयोग करके
थोड़ा सा, उसी फ़ोल्डर से एक दुभाषिया चलाने के लिए, अभी भी स्क्रिप्ट में #! हैशबैंग का उपयोग करना।
उदाहरण के लिए / phr7.2 निष्पादन योग्य / usr / bin से कॉपी किया गया जो एक फ़ोल्डर में एक हैलो स्क्रिप्ट के साथ है।
#!./php7.2
<?php
echo "Hello!";
इसे चलाने के लिए:
./hello
जो समान व्यवहार करता है:
./php7.2 hello