2013-04-26 7 views
16
Process p = Runtime.getRuntime().exec("sh somescript.sh &> out.txt"); 

मैं जावा का उपयोग करके यह आदेश चला रहा हूं। स्क्रिप्ट चल रही है लेकिन यह अपनी स्ट्रीम को फ़ाइल में रीडायरेक्ट नहीं कर रही है। इसके अलावा, फ़ाइल out.txt नहीं बनाई जा रही है।रनटाइम की exec() विधि आउटपुट को रीडायरेक्ट नहीं कर रही है

यदि मैं इसे खोल पर चलाता हूं तो यह स्क्रिप्ट ठीक चलती है।

कोई भी विचार?

+0

वह एम्परसैंड (&) क्यों है? –

+0

यह दोनों आउटपुट स्ट्रीम के साथ-साथ फ़ाइल – user2110167

+0

में त्रुटि स्ट्रीम को रीडायरेक्ट करने के लिए है, क्या आपने फ़ाइल के लिए अपनी प्रणाली खोज ली है? –

उत्तर

30

आपको रीडायरेक्ट करने के लिए ProcessBuilder का उपयोग करने की आवश्यकता है।

ProcessBuilder builder = new ProcessBuilder("sh", "somescript.sh"); 
builder.redirectOutput(new File("out.txt")); 
builder.redirectError(new File("out.txt")); 
Process p = builder.start(); // may throw IOException 
+1

यह बिल्कुल ठीक काम करता है। धन्यवाद .. क्या कोई संदर्भ है जहां मैं इसके बारे में कुछ और पढ़ सकता हूं, मुझे जावा का उपयोग करके खोल पर बहुत सी चीजें करना है। तो यह मेरे लिए उपयोगी होगा – user2110167

+1

@ user2110167 [ ProcessBuilder के बारे में एपीआई दस्तावेज़] (http://docs.oracle.com/javase/7/docs/api/java/lang/ProcessBuilder.html) – johnchen902

+0

धन्यवाद .. एक अच्छा दिन है – user2110167

5

जब आप कोई आदेश चलाते हैं, तो कोई खोल चलाना नहीं होता है और कोई भी खोल आदेश या फ़ंक्शन उपलब्ध नहीं होते हैं। &> जैसे कुछ का उपयोग करने के लिए आपको एक खोल की आवश्यकता है। आपके पास एक है लेकिन आप इसे पास नहीं कर रहे हैं। इसके बजाए कोशिश करो।

Runtime.getRuntime().exec(new String[] { "sh", "somescript.sh &> out.txt" }); 
+0

यह संकलन नहीं करेगा, है ना? –

+0

कोई ओवरलोडेड निष्पादन फ़ंक्शन नहीं है जो इस तरह के इनपुट लेता है, क्योंकि इसकी संकलन त्रुटियां – user2110167

+0

@commentators: 'Runtime.getRuntime()। Exec (नया स्ट्रिंग [] {"sh", "somescript.sh &> out.txt"}); ' – linuxeasy

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