मैं टर्मिनल में बैश स्क्रिप्ट कैसे निष्पादित करूं?


108

मेरे पास एक बैश स्क्रिप्ट है जैसे:

#!/bin/bash

echo Hello world!

मैं इसे टर्मिनल में कैसे निष्पादित कर सकता हूं?


27
क्या इसके पास अनुमतियाँ हैं? chmod +x scriptnameऔर फिर कोशिश करें ./scriptname
dirkgently

जवाबों:


49

$prompt: /path/to/scriptऔर हिट दर्ज करें। ध्यान दें कि आपको यह सुनिश्चित करने की आवश्यकता है कि स्क्रिप्ट ने अनुमतियाँ निष्पादित की हैं।


1
यदि आप पहले से ही /path/to डायरेक्टरी में हैं, जैसे cd /path/toकमांड के साथ , आप ./scriptअपनी स्क्रिप्ट को चलाने के लिए दर्ज कर सकते हैं । इस मामले में '/।' को 'स्क्रिप्ट' से पहले
मत भूलिए


26

निर्देशिका में cd जिसमें स्क्रिप्ट शामिल है, या इसे एक बिन फ़ोल्डर में रखें जो आपके $ PATH में है

फिर टाइप करें

./scriptname.sh

यदि उसी निर्देशिका में या

scriptname.sh

अगर यह बिन फ़ोल्डर में है।


9
यह तभी काम करेगा जब स्क्रिप्ट में एक्ज़िट बिट सेट होगा। शायद इस पर ध्यान देने की जरूरत है।
ब्रायन ओकले

./scriptname.shमेरे लिए काम करता है लेकिन scriptname.shदेता है scriptname.sh: command not found-rwxr-xr-xइसकी अनुमति है।
स्पिकैट्रिक्स

1
cdसभी को कहीं भी सलाह एक और आम शुरुआत गलतफहमी है। जब तक स्क्रिप्ट में आंतरिक रूप से निर्भरता नहीं होती है, जिसके लिए उसे किसी विशेष निर्देशिका में चलाने की आवश्यकता होती है (जैसे, एक डेटा फ़ाइल को पढ़ने की आवश्यकता होती है, जो स्क्रिप्ट अनावश्यक रूप से इंगित करने का विकल्प प्रदान नहीं करती है) तो आपको cdइसे चलाने के लिए कहीं भी कभी भी आवश्यकता नहीं होनी चाहिए , और बहुत अक्सर नहीं करना चाहेगा।
ट्रिपल

24

तुम यह कर सकते थे:
sh scriptname.sh


6
डाउनवोट: यह गलत है अगर यह ठीक से बैश स्क्रिप्ट है।
त्रिवेणी

1
अपवोट: यह मैक ओएस एक्स पर ठीक है अगर आपकी बैश स्क्रिप्ट एक ही डायरेक्टरी में है
कार्ल टेलर

30
@ "यह मेरे लिए काम करता है" "यह एक सही उत्तर है" से बहुत दूर है। यह कर सकते हैं अगर काम shएक सिमलिंक है bash, या अगर स्क्रिप्ट किसी भी बैश विशेष निर्माण का उपयोग नहीं करता। पूर्व मामले में, bashइसके बजाय का उपयोग करना shसही, पोर्टेबल समाधान है; बाद के मामले में, यह इस विशेष प्रश्न का सही उत्तर नहीं है, क्योंकि ओपी ने विशेष रूप से बैश स्क्रिप्ट के लिए सलाह के बारे में पूछा था। गलत उत्तर को गलत ठहराना गैर जिम्मेदाराना है; जो उपयोगकर्ता अंतर को अक्सर समझने में विफल रहते हैं, और यह दिखाने की जरूरत है कि यह "मेरे लिए काम" उत्तर उनके लिए क्यों नहीं हुआ।
त्रिकालिका

@kraftydevil भी ^ इस विषय पर कई लोकप्रिय डुप्लिकेट लक्ष्यों में से एक: stackoverflow.com/questions/5725296/…
tripleee

5
@ आईओटी मैं दोहराता हूं: ऐसी परिस्थितियां हैं जहां यह काम करता है (जैसे आपको पता चला) लेकिन यह सामान्य मामले में हेडलाइन में सवाल का सही जवाब नहीं है। बहुत कम से कम, इस उत्तर को उन शर्तों को स्पष्ट करना चाहिए जिनके तहत यह काम करता है; लेकिन मेरा सुझाव बस इस उत्तर को हटाना होगा।
ट्रिपलए

14

सबसे पहले आप इसे का उपयोग निष्पादन करना है: chmod +x name_of_your_file_script

आपके द्वारा इसे निष्पादन योग्य बनाने के बाद, आप इसका उपयोग करके चला सकते हैं ./same_name_of_your_file_script


10

अपनी निर्देशिका को बदलें जहां cd कमांड का उपयोग करके स्क्रिप्ट स्थित है

फिर टाइप करें

bash program-name.sh

6
cdकहीं भी कोई जरूरत नहीं है ; आप तर्क के रूप में एक मनमाने ढंग से जटिल पथ नाम निर्दिष्ट कर सकते हैं bash; वास्तव में, कोई भी प्रोग्राम जो एक फ़ाइल नाम तर्क लेता है, इस तरह से काम करता है (या बहुत बुरा है, मन-स्तब्ध रूप से टूट गया है)।
ट्रिपल

10

यह एक पुराना धागा है, लेकिन मैं इसके पार हुआ और मुझे आश्चर्य है कि किसी ने भी अभी तक पूरा जवाब नहीं दिया है। तो यहाँ जाता है ...

एक कमांड लाइन स्क्रिप्ट ट्यूटोरियल निष्पादित!

प्रश्न: मैं इसे टर्मिनल में कैसे निष्पादित करूं?

भ्रम और संघर्ष:

  • आप करते नहीं एक 'एक्सटेंशन' (.sh या .py या कुछ और की तरह) की जरूरत है, लेकिन यह बातें का ट्रैक रखने में मदद करता है। यह दुख नहीं होगा। यदि स्क्रिप्ट नाम में कोई एक्सटेंशन है, हालाँकि, आपको इसका उपयोग करना होगा।
  • आपको किसी भी कारण से किसी निश्चित निर्देशिका में होने की आवश्यकता नहीं है।
  • आपको उस प्रोग्राम का नाम टाइप करने की ज़रूरत नहीं है जो फ़ाइल को चलाता है (BASH या पायथन या जो भी) जब तक आप नहीं चाहते हैं। यह दुख नहीं होगा।
  • आपको जरूरत नहीं हैsudo से कुछ भी करने की । यह कमांड किसी अन्य उपयोगकर्ता या 'रूट' (व्यवस्थापक) उपयोगकर्ता के रूप में कमांड चलाने के लिए आरक्षित है। यहाँ बढ़िया पोस्ट ।

(एक व्यक्ति जो केवल लिपियों को निष्पादित करना सीख रहा है उसे इस कमांड का उपयोग नहीं करना चाहिए जब तक कि कोई वास्तविक आवश्यकता न हो, जैसे कि एक नया प्रोग्राम स्थापित करना। आपकी स्क्रिप्ट डालने की एक अच्छी जगह आपके ~ / बिन फ़ोल्डर में है। आप वहां से प्राप्त कर सकते हैं। टाइपिंग cd ~/bin या cd $HOME/binटर्मिनल प्रॉम्प्ट से। आपके पास उस फ़ोल्डर में पूर्ण अनुमति होगी।)

Unix / Linux प्रकार प्रणाली पर टर्मिनल से "इस स्क्रिप्ट को निष्पादित करने के लिए", आपको तीन काम करने होंगे:

  1. सिस्टम को स्क्रिप्ट का स्थान बताएं। (एक चुनें)

    • स्क्रिप्ट नाम (जैसे /path/to/script.sh) के साथ पूर्ण पथ टाइप करें । आप टाइप करके पूरा रास्ता सत्यापित कर सकते हैंpwd या echo $PWDटर्मिनल में ।
    • उसी निर्देशिका से निष्पादित करें और ./पथ के लिए उपयोग करें (जैसे ./script.sh)। आसान।
    • स्क्रिप्ट को उस निर्देशिका में रखें जो सिस्टम पर है PATHऔर केवल नाम टाइप करें (जैसे script.sh)। आप PATHटाइप करके echo $PATHया echo -e ${PATH//:/\\n}यदि आप एक सूची चाहते हैं, तो आप सिस्टम को सत्यापित कर सकते हैं ।
  2. सिस्टम को बताएं कि स्क्रिप्ट को निष्पादित करने की अनुमति है। (एक चुनें)

    • chmod +x /path/to/script.shटर्मिनल में टाइप करके "एक्जीक्यूट बिट" सेट करें ।
    • chmod 755 /path/to/script.shयदि आप संख्या पसंद करते हैं तो आप इसका उपयोग भी कर सकते हैं। यहां एक शांत चार्ट के साथ एक महान चर्चा है
  3. सिस्टम को स्क्रिप्ट का प्रकार बताएं। (एक चुनें)

    • स्क्रिप्ट से पहले प्रोग्राम का नाम टाइप करें। (उदाहरण के लिएBASH /path/to/script.sh या PHP /path/to/script.php) यदि स्क्रिप्ट में कोई एक्सटेंशन है, जैसे .php या .py, यह स्क्रिप्ट नाम का हिस्सा है और आपको इसे अवश्य शामिल करना चाहिए।
    • एक शेबंग का उपयोग करें , जो मैं आपको देखता हूं (#!/bin/bash अपने उदाहरण में । यदि आपके पास आपकी स्क्रिप्ट की पहली पंक्ति है, तो सिस्टम स्क्रिप्ट को निष्पादित करने के लिए उस प्रोग्राम का उपयोग करेगा। प्रोग्राम टाइप करने या एक्सटेंशन का उपयोग करने की कोई आवश्यकता नहीं है।
    • "पोर्टेबल" शेबंग का उपयोग करें । आप सिस्टम को उस प्रोग्राम का संस्करण भी चुन सकते हैं जो प्रोग्राम नाम (उदाहरण के लिए ) या उसके बाद PATHउपयोग करके पहले है । पेशेवरों और विपक्ष के रूप में अच्छी तरह से यहाँ चर्चा कर रहे हैं#!/usr/bin/env#!/usr/bin/env bash#!/usr/bin/env python3

1
बहुत अच्छा सारांश। हो सकता है कि पिछले उदाहरण में लोगों को याद दिलाना script.shऔर script.phpये स्क्रिप्ट का शाब्दिक फ़ाइल नाम हैं, और है कि यदि आप फ़ाइल के नाम में ही विस्तार कर दिया है, आप इसे शामिल करने के लिए जब आप विपरीत स्क्रिप्ट (और इसके चलाने की जरूरत है, अगर स्क्रिप्ट नहीं करता ' टी में एक एक्सटेंशन है, एक मत डालो)। यह उदाहरण DOS के विपरीत है जहाँ आप फ़ाइल नाम से .batया उससे बाहर .exeनिकल सकते हैं , और निष्पादन योग्य माने जाने के लिए छोटे सेट से एक्सटेंशन की आवश्यकता होती है।
ट्रिपल

1
एक अन्य आम शुरुआत गलती के बीच का अंतर गलतफहमी है path, /path, ./path, और ~/path। मुझे लगता है कि आप शायद इसे यहाँ समझाना नहीं चाहते, लेकिन शायद इस तरह के स्पष्टीकरण के लिए लिंक ... ओह खतरे, मुझे यह
त्रिवेणी

1

और फिर भी एक और तरीका है

. /path/to/script

डॉट का अर्थ क्या है?


यह वर्तमान शेल में स्क्रिप्ट को निष्पादित करता है, जिसे बाहर बुलाया जाना चाहिए। यह नहीं है कि ज्यादातर लोगों को क्या उम्मीद है जब आप बस एक स्क्रिप्ट चलाते हैं। यह आपके मौजूदा वातावरण पर दुष्प्रभाव डाल सकता है।
सॉफ्टवेयर इंजीनियर

-2

यदि आप एक निर्देशिका या फ़ोल्डर में हैं जहां स्क्रिप्ट फ़ाइल उपलब्ध है तो बस निष्पादन योग्य मोड में फ़ाइल अनुमति को बदलकर करें

chmod +x your_filename.sh

उसके बाद आप निम्न कमांड का उपयोग करके स्क्रिप्ट चलाएंगे।

$ sudo ./your_filename.sh

इसके ऊपर "।" वर्तमान निर्देशिका का प्रतिनिधित्व करते हैं। ध्यान दें! यदि आप उस निर्देशिका में नहीं हैं जहाँ bash स्क्रिप्ट फ़ाइल मौजूद है तो आप उस निर्देशिका को बदलते हैं जहाँ फ़ाइल का उपयोग करके स्थित है

cd Directory_name/write the complete path

आदेश। अन्यथा आपकी स्क्रिप्ट नहीं चल सकती।


आशा है कि सभी पूरी तरह से ऐसा करेंगे क्योंकि मैं इस विशेष समस्या के बारे में सभी संबंधित अवधारणा का उल्लेख करता हूं।
हसन शमशीर 14

के रूप में यहां अन्य उत्तर में बताया गया है, sudoहै गलत है और संभवतः बहुत गलत है, तो आप किसी अविश्वसनीय स्क्रिप्ट जो गालियाँ शक्तियों आप बेकार में दे दिया पर इसका इस्तेमाल।
16

cdकहीं समझने की सलाह कठिन है, लेकिन शायद गलत भी है।
त्रिकाल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.