विंडोज पर .sh फाइल को कैसे निष्पादित करें?


67

जब मैं कमांड लाइन में कमांड (/name.sh) में एक फ़ाइल (name.sh) को निष्पादित करने की कोशिश कर रहा हूं, तो मुझे वह त्रुटि मिल रही है:

"।" आंतरिक या बाहरी कमांड, ऑपरेबल या बैच फ़ाइल के रूप में मान्यता प्राप्त नहीं है

कृपया मुझे .sh फ़ाइल को निष्पादित करने में मदद करें

जवाबों:


74

आप Windows CMD.EXE पर हैं (त्रुटि संदेश से)। यह कमांड निष्पादित करने के लिए एक अलग सिंटैक्स का उपयोग करता है। आपको sh name.shयह मानकर उपयोग करने की आवश्यकता होगी कि आपने Cygwin या समान इंस्टॉल किया है।

स्पष्ट करने के लिए, विंडोज़ के पास .sh फ़ाइलों का समर्थन करने के लिए एक अंतर्निहित उपयोगिता नहीं है। ऐसे चलाने के लिए, आपको सिग्विन जैसे तीसरे पक्ष के उपकरण को स्थापित करना होगा ।


7
क्या आप भी विंडोज पर सिर्फ Git इंस्टॉल नहीं कर सकते थे? ऐसा लगता है कि ऐसा करना शेल स्क्रिप्ट के लिए समर्थन जोड़ता है, भले ही उन शेल स्क्रिप्ट Git से संबंधित कार्य नहीं कर रहे हों।
डेवइनमिनेशन

2
@DavidB हाँ, यह काम करता है यदि आप C: \ Program Files (x86) \ Git \ bin (या जो भी आपके कंप्यूटर पर है) को अपने PATH में डालते हैं, क्योंकि Git में sh.exe सहित सभी प्रकार के उपयोगी उपकरण हैं
Sumadda

1
@ दाविद हां, गिट बश जानता है कि इसके साथ क्या करना है, सही!
महापुरूष

13

आप Windows कमांड प्रॉम्प्ट पर लिनक्स कमांड चलाने की कोशिश कर रहे हैं।

लिनक्स पर आगे स्लैश एक पथ विभाजक है। विंडोज पर बैकस्लैश एक पथ विभाजक है और फॉरवर्ड स्लैश आमतौर पर एक तर्क को इंगित करता है।

इसलिए, विंडोज सोचता है कि आप "नामक एक कमांड चलाने की कोशिश कर रहे हैं।" और इसे तर्क "/name.sh" पार्स कर रहा है। सही सम्मेलन "। \ Name.sh" होगा। इसके अतिरिक्त विंडोज स्वचालित रूप से आपके आदेश के लिए वर्तमान निर्देशिका खोजेगा ताकि आप "name.sh" टाइप कर सकें।

अगली समस्या जो आपको सामने आएगी वह यह है कि विंडोज को यह नहीं पता है कि एक शा स्क्रिप्ट क्या है, फिर से यह एक लिनक्स चीज है। यदि आप वास्तव में चाहते हैं या श स्क्रिप्ट चलाने की आवश्यकता है, तो आप साइगविन को स्थापित करके इसे हल कर सकते हैं।

हालाँकि, आपकी पिछली टिप्पणियों में से किसी एक को देखते हुए आप स्क्रिप्ट को name.bat में बदल सकते हैं और "#! / Bin / sh" लाइन हटा सकते हैं। अब आपके पास एक बैच फ़ाइल है जिसे विंडोज को समझना चाहिए। आप यहाँ बैच फ़ाइलों के बारे में अधिक पढ़ सकते हैं ।


12

वैकल्पिक रूप से आप अंधेरे की ओर मुड़ सकते हैं और लिनक्स स्थापित कर सकते हैं। प्रॉम्प्ट से:

sh runide.sh

या

sudo sh runide.sh

आपका कार्यक्रम चलेगा और आपके पास एक बेहतर प्रणाली भी होगी।


15
यही कारण है कि कहा, "बस अमीर और किसी को भुगतान यह तुम्हारे लिए क्या करने के लिए" की तरह है
Funkodebat

7

मेरी राय में सबसे अच्छा समाधान:

  • विंडोज के लिए .git डाउनलोड और इंस्टॉल करें

  • डेस्कटॉप पर राइट क्लिक करें और कहें "git bash here"

  • अपनी स्क्रिप्ट को यूनिक्स में निष्पादित करें

  • किया हुआ!

सावधानी: कई कमांड विंडोज़ पर काम नहीं करेंगे! लेकिन फिर भी, बहुत सारे मूल सामान काम करेंगे।

यदि आपको नियमित रूप से उस स्क्रिप्ट की आवश्यकता है तो आप शॉर्टकट (अपने डेस्कटॉप जैसे) पर बनाना चाहते हैं:

  • एक शॉर्टकट बनाएं करने के लिए mintty.exeअपने डेस्कटॉप पर

  • शॉर्टकट के गुणों को संपादित करें और लक्ष्य बदलें (रास्ता रखें):

  • C:\Program Files\Git\usr\bin\mintty.exe" -h always /bin/bash -l -e 'D:\folder\script.sh'


यह काम नहीं करता है। जब मैं @FOR / f "tokens = *"% i IN ('docker-machine env --shell cmd default') चलाता हूं तो DO @% i। मुझे अप्रत्याशित टोकन मिलता है (
स्टीव टोमलिन

5

आप अपनी कार को गैसोलीन के बजाय संतरे के रस पर चलाने की कोशिश कर रहे हैं। विंडोज़ समान कमांडों को .ix या लिनक्स / zOS यूनिक्स सबसिस्टम / * ix शेल स्क्रिप्ट के साथ .bat या .cmd फ़ाइलों में संग्रहीत करता है क्योंकि ऑपरेटिंग सिस्टम के ये दो परिवार डीईसी पीडीपी-एक्स मशीनों के एक सामान्य पूर्वज को साझा करते हैं।

यदि आप तत्काल संतुष्टि चाहते हैं, तो आपको "sh.exe" प्रोग्राम या "csh.exe" या "bash.exe" प्रोग्राम (tsh.exe किसी को भी) प्रदान करने वाला वातावरण स्थापित करना होगा?

वैकल्पिक रूप से, यदि आप यूनिक्स स्क्रिप्ट कमांड्स को जानते हैं, तो बहुत अच्छी तरह से, और आप विंडोज .cmd और .bat फाइल कमांड्स को जानते हैं, बहुत अच्छी तरह से, आप .sh फाइल को .bat या .cmd फाइल में अनुवाद कर सकते हैं। फिर भी, आप अक्सर अधिक यूनिक्स-स्टाइल वाले कार्यक्रमों का सामना करेंगे, जिनके पास विंडोज के तहत कोई समकक्ष नहीं है - grep, sed, vi, emacs, आदि। इस प्रकार, CygWin (कोई न्यूनतम नहीं) स्थापित करने के लिए कॉल - सिर्फ शेल और यूनिक्स पाने के लिए उपकरण। इन विशेष अवसरों के लिए, इसे फ्लैश-ड्राइव पर रखें।


3

किसी ने एमएस-डॉस के बारे में कुछ कहा जो /आज्ञाओं के लिए और \रास्तों का उपयोग कर रहा है। यह थोड़ा भ्रामक है। मेरे उदाहरण को देखो:

C:\myfoo\foo\>cd../.. 
C:\myfoo\foo\>cd..\..

प्रभाव में कोई अंतर नहीं है। हां, यह सभी परिचालनों के लिए सही नहीं है - वास्तविक उत्तर बस नहीं है , या साइगविन या एसएसएचडी के बिना आप नहीं कर सकते।

मैं केवल जानते हैं, क्योंकि मैं stupidly आधे से एक दिन बिताया यह पता लगाने का प्रयास कर रहे if then fiहैं और eval, execके साथ क्या -Djava.somethingजब कहा जाता है।


2

Windows के लिए Github का उपयोग करें। इसमें सभी यूनिक्स पर्यावरण निष्पादनयोग्य शामिल हैं।

https://github-windows.s3.amazonaws.com/GitHubSetup.exe


1
अधिक विशेष रूप से, Git स्थापित करें। Windows के लिए Github को स्थापित करने का एकमात्र कारण बैश शेल है क्योंकि यह Git के साथ आता है। :)
ज़्लाइटाका

अच्छा विकल्प, धन्यवाद, इसलिए अधिक उपकरण स्थापित करने की आवश्यकता नहीं है। +1
गुइलेरमे नैसिमेंटो

1

मुझे यूनिक्स यूटिल नामक एक अलग और आसान उपाय मिला

डाउनलोड करें और इसे C: ड्राइव पर अनज़िप करें। pathशामिल करने के लिए पर्यावरण चर सेट करें C:\UnixUtils\usr\local\wbin

यह महत्वपूर्ण है। करने के लिए पथ सेट नहीं हैC:\UnixUtils\bin


1

पूर्णता के लिए, मैं विंडोज़ 10. के लिए एक नए "लिनक्स के लिए विंडोज सबसिस्टम" सुविधा का उल्लेख करना चाहता हूं। विवरण http://www.howtogeek.com/249966/how-to-install-and-use-the-linux- में वर्णित हैं । बैश-खोल-ऑन-windows-10 /

ध्यान दें, इसके लिए "डेवलपर मोड" स्विच को सक्रिय करने और "विंडोज सबसिस्टम लिनक्स (बीटा)" विकल्प को सक्षम करने की आवश्यकता है।

अपने लिए मैंने पाया कि विंडोज इंस्टॉलेशन के लिए Git (जो मैं वैसे भी उपयोग कर रहा हूं) पर्याप्त है।


1

यह एक पुराना धागा है, लेकिन विंडोज 10 चलाने वालों के लिए। कंट्रोल पैनल से सिर्फ खुली खिड़कियों के फीचर्स 'चालू विंडोज फीचर ऑन या ऑफ'

'लिनक्स के लिए विंडोज सबसिस्टम' की सुविधा चुनें। स्थापित करने के बाद, आपके पास 'बैश' है और आप बैश के भीतर भी मूल लिनक्स सर्वरों को कॉन्फ़िगर कर सकते हैं। और हां, बाश के भीतर श कमांड भी काम करता है।


0

यह संभव है कि समस्या वास्तव में फ़ाइल के भीतर है name.sh- आप .कमांड का उपयोग करने की कोशिश कर रहे हैं, लेकिन यह एक प्रकार का शेल (जैसे csh, मुझे लगता है) चलाने का प्रयास कर रहा है, जिसमें यह एक वैध कमांड नहीं है।

तो: name.shसही से शुरू होता है #!/bin/sh(यदि आप वास्तव में चलाने की कोशिश कर रहे हैं sh)?


1
हाँ यह शुरू होता है #! / bin / sh cd D: \ Raghu D: winzip32.exe -min -a -r D: \ p फ़ाइल की सामग्री को मज़बूत करता है

0

ठीक है, इसमें बहुत कुछ गलत है - #! / bin / sh को ड्रॉप करें, और एक्सटेन्शन को बैट में बदलें, और यह कुछ और फिक्स के साथ काम कर सकता है। तो आप बस इसे इसके नाम से भी लागू कर सकते हैं।

एक यूनिक्स शेल स्क्रिप्ट का सिंटैक्स, और एक विंडोज़ बैच फ़ाइल भी समान नहीं हैं। साइबरविन, या अनएक्सूटिल्स के साथ खिलवाड़ करने का एक लोड कुछ ऐसा बना सकता है जो दोनों में काम करेगा, लेकिन जब तक आप पूरी तरह से निश्चित नहीं हैं कि पर्यावरण हमेशा एक जैसा है, यह सिरदर्द के लायक नहीं है


drop the #!/bin/sh, and change the extention to bat, and it might work with a few more fixes.क्या?! मुझे संदेह है कि आपने कभी यह कोशिश नहीं की ... विंडोज पर, यहां तक ​​कि सबसे सरल बैश क्षमताओं को असमर्थित किया जाता है या लंबे समय तक वाक्यविन्यास की आवश्यकता होती है।
कैमिलो मार्टिन

दूसरे पैराग्राफ में इस तथ्य को शामिल किया गया है कि काम नहीं करने की इसकी संभावना, उचित मात्रा में काम के बिना।
जर्नीमैन गीक

ठीक है, तुम सही हो।
कैमिलो मार्टिन

0

यदि आपके घर (या काम) में एक लिनक्स बॉक्स है और उसी नेटवर्क में प्लग किया गया है, और यह नेटवर्क सुरक्षित है, तो यह हो सकता है:

  1. विंडोज पर एक फ़ोल्डर साझा करें (बहुत आसान है, लेकिन सुनिश्चित करें कि नेटवर्क घुसपैठियों से सुरक्षित है)।
  2. इसे लिनक्स में mount //WinMachine/Share LinuxFolder(IIRC, और सांबा की आवश्यकता है ) के साथ माउंट करें ।
  3. PuTTY जैसी किसी चीज़ का उपयोग करके , दूर से उस लिनक्स बॉक्स में लॉग इन करें।
  4. अपने कमांड को माउंटेड फोल्डर में चलाएं।

0

खिड़कियों से शेल स्क्रिप्ट चलाने के लिए। पहले कमांड का उपयोग करें: dos2unix तब आप अपने सामान्य कमांड का उपयोग कर सकते हैं: sh runide.sh

यह काम करेगा।


क्षमा करें, थोड़ा सुधार किया जाना चाहिए। कमांड का उपयोग करें: "dos2unix runide.sh" आउटपुट: dos2unix: फ़ाइल runide.sh को UNIX प्रारूप में कनवर्ट करना तब आप अपने कमांड का उपयोग करते हैं: "sh runide.sh" यह निश्चित रूप से आपको शेल स्क्रिप्ट चलाएगा। हैप्पी लर्निंग
श्रीधर जीवी

प्रश्न फ़ाइल प्रारूप के बारे में नहीं था, बल्कि खिड़कियों में शेल की कमी के बारे में था।
अर्चनामार

0

हालांकि यहां मौजूदा समय में जवाब सही थे, Windows 10 है अब वैकल्पिक रूप से शामिल एक पूर्ण बैश खोल चल उबंटू का एक संशोधित संस्करण

एक बार निष्पादन योग्य हो जाने पर, स्क्रिप्ट को बैश के भीतर से सामान्य तरीके से चलाया जा सकता है, जैसे:

chmod +x myscript.sh
./myscript.sh

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

C:\Windows\System32\bash.exe -c "./myscript.sh"

यदि आपकी स्क्रिप्ट का पथ शॉर्टकट के स्थान के सापेक्ष है (जैसे ऊपर दिया गया उदाहरण) सुनिश्चित करें कि 'प्रारंभ' फ़ील्ड भी रिक्त है।

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