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


19

इसलिए मैंने अपनी पहली बैश स्क्रिप्ट लिखी है:

#!/bin/bash
echo 'hello world!'
exit

मुझे पता है कि इसके काटने का सही स्थान है और यह निष्पादन योग्य है:

$ which bash
/bin/bash
$ chmod +x myscript.sh

अब मैं इसे कमांड लाइन से चलाना चाहता हूं, लेकिन मुझे एक त्रुटि मिलती है:

$ myscript.sh
myscript.sh: command not found

इसलिए इसके बजाय मैं यह कोशिश करता हूं और यह काम करता है:

$ bash myscript.sh
hello world!

क्या यह है कि मुझे हमेशा इसे निष्पादित करने की आवश्यकता कैसे होगी? मुझे ऐसा लगता है कि मैंने इसके बिना पूर्ववर्ती अन्य लिपियों को निष्पादित किया है bash। मैं इसके साथ पूर्ववर्ती होने के बिना myscript.sh कैसे चला सकता हूं bash?

अद्यतन करें: यहाँ की एक अच्छी व्याख्या है क्यों और कैसे एक बैश स्क्रिप्ट निष्पादित करने के लिए

जवाबों:


28

आपको फ़ाइल को निष्पादन योग्य बनाना होगा। आप ऐसा कर सकते हैं

chmod +x <filename>

आपकी स्क्रिप्ट का नाम कहां है और फिर आपको इसके बारे में बताना होगा ./ फ़ाइल को स्थानीय निर्देशिका में फ़ाइल चलाने के लिए निर्देश देने के लिए, जैसे:

./script.sh

आप केवल उन फ़ाइलों को चला सकते हैं जो आपके पास हैं PATH या कि आप उन्हें एक पथ निर्दिष्ट करें। ./स्थानीय निर्देशिका, में नहीं है PATH डिफ़ॉल्ट रूप से क्योंकि कोई इसका उपयोग नापाक उद्देश्यों के लिए कर सकता है। नामक एक स्क्रिप्ट की कल्पना करो ls एक निर्देशिका में गिरा, आप उस निर्देशिका के अंदर जाते हैं, भागते हैं ls और वह स्क्रिप्ट कुछ बुरा करती है।

जब आप इस पर होते हैं, तो आप इसका उपयोग करके बैश के बजाय शेल चलाकर इसे और अधिक पोर्टेबल बनाना चाह सकते हैं:

#!/bin/sh

या बैश चलाने से कोई फर्क नहीं पड़ता कि यह कहाँ स्थापित है जब तक यह स्थापित है:

#!/usr/bin/env bash

मैंने पहले ही chmod + x myscript.sh के साथ किया है। क्या मैंने गलत किया?
Andrew

1
आप शायद याद कर रहे हैं। मैंने इसे उत्तर में जोड़ दिया है।
pupeno

समझ में आता है। और यह काम करता है। धन्यवाद!
Andrew

1

फर्नांडीज द्वारा सलाह के अलावा, इसे इस तरह से एक बिंदु के साथ पूर्ववर्ती करें:

./myscript.sh

सुरक्षा कारणों से वर्तमान निर्देशिका निष्पादन पथ में शामिल नहीं है।


1

बैश स्क्रिप्ट को निष्पादित करने के 3 तरीके हैं। उदाहरण के साथ myscript.sh उस स्क्रिप्ट के रूप में जिसे आप निष्पादित करना चाहते हैं।

विधि 1

स्क्रिप्ट को एक उप प्रक्रिया के रूप में निष्पादित करें, जो लिखने के मालिक नहीं होने पर अनुमति की समस्याओं को ट्रिगर करेगा। आप chmod द्वारा अनुमतियां बदल सकते हैं।

$ चामोद + x myscript.sh

$ ./myscript.sh

विधि 2

वर्तमान उपयोगकर्ता के रूप में स्क्रिप्ट चलाएँ। यदि बैश स्क्रिप्ट अच्छी तरह से लिखी गई है, तो इसमें त्रुटियां नहीं होनी चाहिए।

$ बैश myscript.sh

विधि 3

विधि 2 के समान लेकिन एक छोटा कट

$। myscript

उम्मीद है की यह मदद करेगा!:)

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