किसी फ़ाइल (जैसे .sh स्क्रिप्ट) को निष्पादन योग्य कैसे बनाया जाए, इसलिए इसे टर्मिनल से चलाया जा सकता है


245

मेरे पास एक script.sh फ़ाइल है और इस फ़ाइल का प्रकार शेलस्क्रिप्ट फ़ाइल है। मैं इस फाइल को एप्लिकेशन / एक्स-एक्जीक्यूटेबल फाइल के रूप में बनाना चाहता हूं। मैं इसे कैसे बना सकता हूं?




यह कोई डुप्लिकेट नहीं है, क्योंकि मैंने विशेष रूप से इसे एप्लिकेशन / एक्स-निष्पादन योग्य बनाने के बारे में पूछा है। अन्य प्रश्न टर्मिनल में श फाइल खोलने के लिए कहता है।
ज़ियादीन सदिगोव

जवाबों:


326

आप फ़ाइल को निष्पादन योग्य के रूप में चिह्नित कर सकते हैं:

chmod +x filename.sh

आप इसे इस तरह निष्पादित कर सकते हैं:

./filename.sh

यदि आप इसे शुरू करने के लिए एक अलग कमांड का उपयोग करना चाहते हैं, तो आप एक उपनाम जोड़ सकते हैं:

gedit ~/.bashrc

इसे फ़ाइल के अंत में जोड़ें:

alias <new name>='/home/<full path to script>/filename.sh'

नया टर्मिनल सत्र खोलें या source ~/.bashrcआवेदन करने के लिए अपने टर्मिनल में टाइप करें। फिर स्क्रिप्ट शुरू करने के लिए बस नए नाम का उपयोग करें।


क्या आप जानते हैं कि कमांड में प्रवेश करने के बाद sudo कमांड का उपयोग कैसे किया जाता है: "alias कमांड 1 = '/ home/user_name/dir/script.sh'। खदान में, यह बिना sudo के काम करता है, लेकिन इसके साथ नहीं।
आदित्य

आपको .bashrc रन: bash को पुनरारंभ करने के लिए bash को संपादित करने के बाद bash को पुनः आरंभ करने की आवश्यकता है।
संपत परेरा

2
निष्पादन योग्य फ़ाइल ./filename.shसिर्फ और सिर्फ filename.shक्यों नहीं है ?
user1993

@ user1993 हां, मैं इसे केवल निष्पादन योग्य बनाने के लिए एक रास्ता ढूंढ रहा हूं, filenameन कि./filename
MycrofD

@ user1993 आम तौर पर, ./filename.shवर्तमान निर्देशिका में filename.shएक फ़ाइल निर्दिष्ट करता है और वर्तमान निर्देशिका या PATH के किसी भी निर्देशिका में एक फ़ाइल निर्दिष्ट करता है। पहला उपयोग किसी भी अनिश्चितता को हटाता है कि किस फ़ाइल तक पहुँचा है। इस मामले में, आप #!/bin/bashकेवल फ़ाइल नाम दर्ज करके, बैश या किसी अन्य दुभाषिया ( अपनी स्क्रिप्ट में पहली पंक्ति के रूप में ग्रहण की गई) के साथ स्क्रिप्ट को निष्पादित करने का प्रयास कर रहे हैं । इस उपयोग के लिए निर्देशिका निर्दिष्ट करने की आवश्यकता है। वैकल्पिक रूप से, आप कोशिश कर सकते हैं bash filename.shजो अनिर्दिष्ट निर्देशिका के साथ काम करता है।
a505999

37

फ़ाइल को निष्पादन योग्य बनाने के दो तरीके हैं:

जीयूआई विधि:

अनुमतियाँ टैब पर जाएं, फिर बॉक्स को टिक करें `निष्पादित करें: [] प्रोग्राम के रूप में फ़ाइल निष्पादित करने की अनुमति दें।

यहां छवि विवरण दर्ज करें

टर्मिनल / कमांड विधि:

आप या तो उपयोग कर सकते हैं:

cd /to/my/required/directory

तो भागो

chmod +x filename.extension

या बस चलाएं:

chmod +x /path/to/your/filename.extension

chmod कुछ और उन्नत विकल्प भी हैं:

रिक्त स्थान यह दिखाने के लिए हैं कि यह विभाजित है: - rwx --- ---

---उपयोगकर्ता का पहला सेट है। दूसरा समूह है और अंतिम अन्य (कोई भी) है

r का अर्थ है रीड, w फॉर राइट और x फॉर eXecute।

इसलिए सभी को इसे पढ़ने की अनुमति देने के लिए, लेकिन केवल समूह को निष्पादित करने के लिए और उपयोगकर्ता को पढ़ने और इसे लिखने के लिए (लेकिन किसी कारण से निष्पादित नहीं किया जाएगा:

-rw- rx- r-- लेकिन इसे कमांड के रूप में जोड़ा जाएगा:

chmod +rw-rx-r-- /path/to/file.extension

chmodसंख्या में भी ऐसा कर सकते हैं। यह बाइनरी पर आधारित है (मुझे लगता है, क्योंकि यह 1,2 और 4 है)

तो ये संख्याएँ हैं:

निष्पादित उपयोगकर्ता के द्वारा 100। निष्पादित समूह है द्वारा 010। अन्य द्वारा निष्पादित 001 है

उपयोगकर्ता द्वारा लिखें है 200। समूह द्वारा लिखें है 020। अन्य द्वारा लिखें है 002

उपयोगकर्ता द्वारा पढ़ा जाता है 400। समूह द्वारा पढ़ा जाता है 040। द्वारा पढ़ें अन्य है 004

फिर आप वांछित संयोजन प्राप्त करने के लिए इन्हें एक साथ जोड़ते हैं।

इसलिए सभी को इसे पढ़ने की अनुमति देने के लिए, लेकिन केवल समूह को निष्पादित करने के लिए और उपयोगकर्ता को इसे लिखने के लिए (लेकिन किसी कारण से निष्पादित नहीं होने के लिए) होगा:

400 + 040 + 004और 010और200

जो 600 + 050 + 004 = 654 तक जोड़ता है।

फिर आप कमांड चला सकते हैं।

chmod +654 /path/to/file.extension इसे सेट करने के लिए।

और सभी अनुमतियाँ सेट करने के लिए आप टाइप कर सकते हैं:

chmod +rwxrwxrwx /path/to/file.extension

या (यह लिखना थोड़ा आसान है, लेकिन हर एक को याद रखना कठिन है):

chmod +777 /path/to/file.extension

अंत में, आप कर सकते हैं:

chmod -777 /path/to/file.extension

सभी अनुमतियों को सभी से दूर ले जाने के लिए।

तथा:

chmod +300 /path/to/file.extension

किसी भी अन्य अनुमतियों को प्रभावित किए बिना, उपयोगकर्ता के लिए पढ़ने और लिखने को जोड़ने के लिए (जैसे निष्पादित अनुमतियाँ)।

इस वेबसाइट में एक बहुत उपयोगी छोटी ग्रिड चेकबॉक्स चीज़ है, जिससे आप अपने इच्छित विकल्पों पर टिक कर सकते हैं और यह आपको कमांड देता है:

यहां छवि विवरण दर्ज करें

हालांकि, सभी संभव संयोजनों का उपयोग करने के लिए समझदार नहीं हैं; जो मुख्य उपयोग किए जाते हैं वे निम्नलिखित हैं:

755 - Ownerसब है, और Groupऔर Otherपढ़ सकते हैं और निष्पादित कर सकते हैं

700 - Ownerसभी है

644 - Ownerपढ़ सकते हैं और लिखते हैं, और Groupऔर Otherपढ़ सकते हैं

600 - Ownerपढ़ और लिख सकते हैं

और, यदि आप गैर-तुच्छ उपयोगकर्ता समूहों का उपयोग कर रहे हैं:

775 - Ownerपढ़ सकते हैं और लिखते हैं, और Groupऔर Otherपढ़ सकते हैं

770 - Ownerऔर Groupसभी के पास है, और Otherपढ़ सकते हैं और निष्पादित कर सकते हैं

750 - Ownerसब है, और Groupपढ़ सकते हैं और निष्पादित कर सकते हैं

664 - Ownerऔर Groupपढ़ सकते हैं और लिख सकते हैं, और Otherबस पढ़ सकते हैं

660 - Ownerऔर Groupपढ़ और लिख सकते हैं

640 - Ownerपढ़ सकते हैं और लिख Groupसकते हैं , और पढ़ सकते हैं

777 और 666 का उपयोग शायद ही कभी किया जाता है, सिवाय / tmp के।

सामान्य उपयोग में लोगों को इंगित करने के लिए धन्यवाद इल्मरी करोनन !


क्या यह बाइनरी (2-आधारित) के बजाय ऑक्टल (8-बेस) पर आधारित नहीं है? बाइनरी में आपके पास केवल 0 और 1 हो सकते हैं, जबकि अष्टक में आपके पास 0, 1, ... 6, 7
जस्टिनस

@Justinas बाइनरी उस 7 = 4 + 2 + 1 - 111 में पढ़ें और लिखें और निष्पादित करें का प्रतिनिधित्व करता है।
टिम

8

Daud:

chmod +x /path/to/file.sh

इसे निष्पादन योग्य बनाने के लिए, चलाएं:

chmod -x /path/to/file.sh

उदाहरण के लिए मैंने बनाई .shफ़ाइल:

vi tester12.sh

Vi संपादक पर कुछ कोड लिखने के बाद, मैं vi संपादक से बाहर निकल जाऊंगा:

:wq!
chmod +x tester12.sh
./tester12.sh
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.