2014-08-29 23 views
21

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

task build << { 
} 
task preBuild << { 
    println 'do prebuild stuff:' 
} 
task myPrebuildTask(type: Exec) { 
    workingDir "$projectDir/mySubDir" 
    commandLine './myScript.sh' 
} 

build.dependsOn preBuild 
preBuild.dependsOn myPrebuildTask 

हालांकि, जब मैं या तो gradle myPrebuildTask को फोन करके या बस परियोजना का निर्माण करके कार्य निष्पादित, तो निम्न त्रुटि होती है:

> A problem occurred starting process 'command './myScript.sh'' 

दुर्भाग्य से, सब मैं thats।
मैंने निम्नलिखित - एक ही त्रुटि की कोशिश की है।

commandLine 'sh mySubDir/myScript.sh' 

मैं सिग्विन खोल के अंदर विंडोज़ पर ग्रैडल 1.10 (एंड्रॉइड द्वारा आवश्यक) का उपयोग करता हूं। कोई विचार?

उत्तर

18

उपयोग

commandLine 'sh', './myScript.sh' 

अपनी स्क्रिप्ट अपने आप में एक कार्यक्रम में ही, यही कारण है कि आप इस कार्यक्रम और एक तर्क के रूप अपनी स्क्रिप्ट के लिए पथ के रूप में 'श' घोषित करना है नहीं है।

+0

विभिन्न आदेश होगा लिनक्स और विंडोज़ (सिगविन) की आवश्यकता है। मैंने स्क्रिप्ट नाम को पैरामीटर के रूप में आपूर्ति करना समाप्त कर दिया: कमांडलाइन 'sh', 'myScript.sh' –

+0

कार्य को प्रोजेक्ट ग्रेडल फ़ाइल में रखना याद रखें और मॉड्यूल ग्रेडल फ़ाइल नहीं। –

-5

मैं +x अनुमति के साथ /usr/local/bin करने के लिए अपने खोल scipt की नकल की और सिर्फ एक और आदेश के रूप में यह प्रयोग किया है:

commandLine 'my_script.sh' 
+0

यह विकल्प काम करता है, लेकिन मैं/usr/local/bin में कई फ़ाइलों को पुनः अनुशंसा नहीं करता –

11

कार्यकारी कार्य लेखन का एक और अधिक सामान्य तरीके से, लेकिन विंडोज़/लिनक्स के लिए पोर्टेबल, आप लागू कर रहे हैं पथ पर एक कमांड फ़ाइल:

task myPrebuildTask(type: Exec) { 
    workingDir "$projectDir/mySubDir" 
    if (System.getProperty('os.name').toLowerCase(Locale.ROOT).contains('windows')) { 
     commandLine 'cmd', '/c', 'mycommand' 
    } else { 
     commandLine 'sh', '-c', 'mycommand' 
    } 
} 

यह सीधे ओपी के लिए उपयोग के मामले का समाधान नहीं करता है (के बाद से वहाँ काम कर निर्देशिका में स्क्रिप्ट फ़ाइल है), लेकिन सवाल का शीर्षक अधिक सामान्य है (और आकर्षित किया मुझे यहाँ), तो यह कुछ मदद कर सकता है एक शायद

3

दुर्भाग्य के साथ विकल्पों कमांडलाइन किसी भी तरह से मेरे लिए काम नहीं किया और मेरे दोस्त निष्पादन

executable "./myScript.sh" 

और पूर्ण कार्य के साथ अन्य रास्ता खोजने के तहत क्रियान्वित करने के लिए

task startScript() { 
    doLast { 
    exec { 
      executable "./myScript.sh" 
     } 
    } 
}