2008-10-08 9 views
11

मैं src/ से dst/ग्रूवी निष्पादित "सीपी *" शेल कमांड

 
groovy:000> "cp src/*.txt dst/".execute().text  
===> 
groovy:000> 

आप कमांड देख सकते हैं करने के लिए पाठ फ़ाइलें और केवल पाठ फ़ाइलों की प्रतिलिपि बनाना चाहते कार्यान्वित w/बाहर त्रुटि लेकिन फाइल src/test.txt कॉपी हो नहीं करता है dst/ को

यह भी विफल रहता है:

 
groovy:000> "cp src/* dst/".execute().text  
===> 
groovy:000> 
हालांकि

...

 
"cp src/this.txt dst/".execute().text 

भी काम करता है,

 
"cp -R src/ dst".execute().text 

काम करता है

क्यों खुराक वाइल्ड कार्ड का कारण करने के लिए अपने आदेश चुपचाप असफल रहे हैं?

उत्तर

6

वाइल्डकार्ड विस्तार शैल द्वारा किया जाता है, सीपी (या ग्रोवी) द्वारा नहीं। आपका पहला उदाहरण * नाम की एक फ़ाइल की प्रतिलिपि बनाने का प्रयास कर रहा है। आप अपना कमांड "sh -c 'cp बना सकते हैं ...' '

13

धन्यवाद मुझे वहां आधे रास्ते के लिए धन्यवाद।

मुझे विश्वास है कि उनका समाधान काम नहीं कर रहा था क्योंकि 'बचने' मुद्दे के कारण।

उदाहरण के लिए

...

 
"sh -c 'ls'".execute() 

काम करता है। लेकिन ...

 
"sh -c 'ls '".execute() 

नहीं है।

शायद वहाँ लाइन लेकिन वैकल्पिक हल मैं उपयोग कर रहा हूँ में ठीक से बचने के लिए एक रास्ता है खूबसूरती से exec

 
command = ["sh", "-c", "cp src/*.txt dst/"] 
Runtime.getRuntime().exec((String[]) command.toArray()) 

काम करता है Runtime.getRuntime()। के लिए एक स्ट्रिंग सरणी पारित करने के लिए है!

+2

मुझे लगता है कि आप को आसान बनाने में कर सकता है कि साथ: आदेश = .... command.execute() सरणियों के रूप में भी – TimM

+2

निष्पादित कारण समझते हैं कि '" श -c 'सीपी src/* txt डीएसटी /। '' '' काम नहीं करता है क्योंकि ग्रोवी कई तर्कों के रूप में व्हाइटस्पेस के साथ एक उद्धृत स्ट्रिंग तर्क की व्याख्या करेगा। तो groovy वास्तव में निम्न तर्कों के साथ sh निष्पादित कर रहा है: arg1 = -c, arg2 = 'cp, arg3 = src/*। Txt, arg4 = dst /' इस तरह के कमांड के परिणामस्वरूप "अन्तर्निहित उद्धृत स्ट्रिंग" त्रुटि होगी। आपके पास सही समाधान है, जो एक सरणी का उपयोग करना है। इसके अलावा, @ टीआईएमएम सही है, आप उपरोक्त को '["sh", "-c", "cp src/*। Txt dst /"] को सरल बना सकते हैं। निष्पादित करें() ' – BennyFlint

+0

यदि आप गतिशील रूप से अपने आदेश बना रहे हैं sh -c और सरणी के साथ समाधान सबसे अच्छा समाधान है। बस करें: डीफ़ कमांड = (यहां कमांड उत्पन्न करें) def proc = ["sh", "-c", कमांड] .execute() – henrik