2011-11-27 11 views
18

मुझे पता है कि जब सिगविन इंस्टॉल करता है वहां एक बैच फ़ाइल होती है जिसका उपयोग विंडोज़ में लॉन्च करने के लिए किया जाता है। लेकिन अगर मैं सिग्विन लॉन्च किए बिना एक स्क्रिप्ट चलाने और "./script"एक बैच फ़ाइल से सिग्विन चल रही स्क्रिप्ट?

मैं ऐसा करने के लिए बैच फ़ाइल कैसे बना सकता हूं?

जैसा कि ... केवल एक बैच फ़ाइल है जिसे क्लिक करने पर, सिगविन खोलता है और खोल स्क्रिप्ट चलाता है।

उत्तर

27

"foo.bsh" चलाने के लिए, निम्न सामग्री के साथ एक बैच फ़ाइल बनाने और चलाने के लिए यह:

set PATH=C:\cygwin\bin;%PATH% 
    c:\cygwin\bin\bash.exe c:\path\to\foo.bsh 

"C: \ cygwin \ बिन" भाग अपनी चुनी की स्थापना स्थान के आधार पर भिन्न कर सकते हैं cygwin।

+0

हाँ यह काम करता है .. धन्यवाद – dhroove

3

किस प्रकार की शैल स्क्रिप्ट? दे घुमा के? यदि आपको बैश स्क्रिप्ट चलाने की आवश्यकता है, तो बस इसे शॉर्टकट के माध्यम से bash.exe के साथ चलाएं। लक्ष्य कुछ ऐसा होगा:

C:\cygwin\bin\bash.exe foo.bsh 

bash.exe का पथ साइगविन स्थापित किया गया था इस पर निर्भर करेगा। (यदि आपके बिन निर्देशिका आपके पथ पर्यावरण चर में है तो आपको पथ की आवश्यकता नहीं है।)

यदि आप चाहें तो बैच स्क्रिप्ट में वही काम कर सकते हैं। कमांड लाइन उपरोक्त "लक्ष्य" जैसा ही होगी।


संपादित करें टिप्पणी के आधार पर (अब भी यह सोचते हैं बैश):

ठीक है, तो अपने बैच स्क्रिप्ट (.bat) में सिर्फ टाइप करें:

bash.exe script.txt 

आप जोड़ना पड़ सकता है "bash.exe" के लिए पथ। यदि आप सुनिश्चित नहीं हैं कि "bash.exe" कहां है, तो आपने अपने प्रश्न में "Cygwin.bat" फ़ाइल खोल दी है। इसमें chdir कमांड में पथ होना चाहिए। (नोट: Cygwin.bat बस इंटरैक्टिव मोड में bash.exe चला रहा है। यह वास्तव में "साइगविन" नामक कुछ भी नहीं चला रहा है।)

यदि आपको "script.txt" में पथ जोड़ने की आवश्यकता नहीं है, तो यह भी नहीं है आपकी बैच स्क्रिप्ट के समान निर्देशिका में।

फिर यह बैच स्क्रिप्ट के बजाय शॉर्टकट में भी काम करेगा।

+0

ठीक है, मैं एक शेल स्क्रिप्ट चलाने के लिए चाहता हूँ। लेकिन मैं साइविन को खोलना नहीं चाहता हूं, फिर इसे निष्पादित करने के लिए सभी चीजें टाइप करें। मैं बस सिगविन खोलने के लिए बैच फ़ाइल चलाऊंगा और फिर यदि संभव हो तो इसे इस तरह से करें। – Aaron

+1

@Aaron - सभी चीजें टाइप करें? कमांड लाइन तर्क सहित कोई कमांड लाइन, आप सिग्विन में स्क्रिप्ट निष्पादित करने के लिए उपयोग शॉर्टकट या बैच स्क्रिप्ट में जोड़ा जा सकता है। सिगविन नहीं खुल जाएगा, लेकिन एक cmd खिड़की होगी। स्क्रिप्ट समाप्त होने पर इसे बंद करना चाहिए। –

+0

मेरे पास एक शेल स्क्रिप्ट है जिसे मैं साइगविन में चलाता हूं। मैं सोच रहा था कि क्या मैं एक बैच फ़ाइल बना सकता हूं जो इसे सब लिखने के बजाय मेरे लिए सब कुछ करेगी? लेकिन मुझे यकीन नहीं है कि बैच फ़ाइल में साइगविन का उपयोग कैसे करें। – Aaron

8

आप मार (या जो भी श-संस्करण) के अध्यक्ष एवं प्रबंध निदेशक से ट्रैम्पोलिन के लिए कुछ इस तरह की कोशिश कर सकते:

: <<TRAMPOLINE 
    @echo off 
    bash -c "exit 0" || (echo.No bash found in PATH! & exit /b 1) 
    bash "%~f0" "%*" 
    goto :EOF 
    TRAMPOLINE 
    ##################### 
    #!/bin/bash -- it's traditional! 
    echo "Hello from $SHELL" 
+1

यह मेरे लिए अच्छी तरह से काम करता है, लेकिन मुझे लगता है कि फ़ाइल को सहेजते समय मुझे यूनिक्स स्टाइल लाइन के अंत का उपयोग करना था ताकि बैश स्क्रिप्ट खुश हो। – gdt

5

मैं ऑस्टिन हेस्टिंग्स द्वारा दिए गए जवाब पर विस्तार करने के लिए इसके बिना काम करने के लिए अनुमति देना चाहते हैं पथ में सिग्विन और बल्ले फ़ाइल के साथ निर्देशिका सेटअप में काम करने के लिए (इसलिए एक अलग "स्टार्ट इन" पथ के साथ एक शॉर्टकट भी उपयोग किया जाता है)। परिवर्तनों को बैश के लिए पूर्ण पथ शामिल करना है, पथ और पर्यावरण के साथ बैश सेटअप को सही तरीके से बनाने के लिए विकल्प -l का उपयोग करें और वर्तमान निर्देशिका को shift का उपयोग करके पहले तर्क के रूप में बाश करने के लिए पास करें। फ़ाइल में यूनिक्स न्यूलाइन का उपयोग करना याद रखें या आपको बहुत सारी त्रुटियां मिलेंगी। एएनएसआई के बजाय यूटीएफ 8 का भी उपयोग करें।

: <<TRAMPOLINE 
@echo off 
C:\cygwin\bin\bash -c "exit 0" || (echo.No bash found in PATH! & exit /b 1) 
setlocal EnableDelayedExpansion 
for %%i in (%*) do set _args= !_args! "%%~i" 
C:\cygwin\bin\bash -l "%~f0" "%CD%" %_args% 
goto :EOF 
TRAMPOLINE 
##################### 
#!/bin/bash -- it's traditional! 
cd "$1" 
shift 
echo Working from $PWD 

संपादित करें: तर्कों को ठीक से दबाने के लिए ट्रम्पोलिन कोड को ठीक करने के लिए फिक्स्ड करें। बीएटी फाइलों में "$ @" के बराबर बैश नहीं है और प्रत्येक तर्क को लूप प्रोसेसिंग किया जाता है और फिर bash.exe को पास किया जाता है। अब रिक्त स्थान के साथ तर्क सही ढंग से संभालता है।

+0

हालांकि हम इस आदेश से कैसे बाहर निकलते हैं? 'TRAMPOLINE' के बाद 'निकास/बी' डालना काम नहीं करता है। –

+0

'TRAMPOLINE' पंक्ति 'bash' में होने के बाद पर्यावरण के रूप में बस' निकास 'टाइप करें। 'निकास/बी' एक 'cmd' कमांड है। – galmok

+0

मैंने पूछा क्योंकि मेरे मामले में 'बाहर निकलने' में ऐसा लगता है कि यह काम नहीं कर रहा था। मुझे तब से पता चला है क्योंकि मैं एक लॉगिन खोल (-आई) बना रहा था और मेरे '.bashrc' आदि में कुछ अतिरिक्त बैश उदाहरण बना रहा था जो पृष्ठभूमि में चारों ओर लटक रहे थे (इस प्रकार सीएमडी विंडो को मारने से बाहर निकलने से रोकते थे) । –

0

किसी भी .bat फ़ाइल से "your_bash_file" चलाने के लिए, .bat में निम्नलिखित पंक्ति लिखें:

Git-bash.exe (path_to_your_bash_file>)

पी.एस. विंडोज Git आवश्यक

1

आप एक mintty खिड़कियों में अच्छी तरह से में स्क्रिप्ट खोलना चाहते हैं स्थापित है, यह (@ galmok के जवाब के आधार पर) चाल करेंगे।

: <<TRAMPOLINE 
@echo off 
C:\Users\user\Downloads\cyg-packages\bin\bash -c "exit 0" || (echo.No bash found in PATH! & exit /b 1) 
setlocal EnableDelayedExpansion 
for %%i in (%*) do set _args= !_args! "%%~i" 
C:\Users\user\Downloads\cyg-packages\bin\mintty.exe -i /Cygwin-Terminal.ico C:\Users\user\Downloads\cyg-packages\bin\bash -l "%~f0" "%CD%" %_args% 
goto :EOF 
TRAMPOLINE 
##################### 
#!/bin/bash -- it's traditional! 
cd "$1" 
shift 
echo Working from $PWD 
vim "[email protected]" 

नोट: मेरी यूज-केस विजुअल स्टूडियो, जिसके कारण वहाँ अंत में vim के लिए एक कॉल है से एक टर्मिनल vim को खोलने के लिए आवश्यकता थी। बैच फ़ाइल बाद में बाहर निकल जाएगी।

संबंधित मुद्दे