मैं एक पर्ल स्क्रिप्ट है कि दूसरे के साथ एक स्ट्रिंग की जगह चल रहा था जब जावा प्रोग्राम से लागू नहीं चलता है:पर्ल स्क्रिप्ट टर्मिनल में चलता है, लेकिन
perl -pi.back -e 's/str1/str2/g;' path/to/file1.txt
जब मैं टर्मिनल से यह आदेश चला यह अच्छी तरह से सभी को बदल देता है str1
की 0 दी गई फ़ाइल में str2
पर होने वाली घटनाएं। जब मैं जावा से चलाने यह फ़ाइल का उपयोग करता है, लेकिन कोई प्रतिस्थापन होती है:
Runtime.getRuntime().exec("perl -pi.back -e 's/str1/str2/g;' path/to/file1.txt");
- मुझे यकीन है कि यह फ़ाइल पर पहुंचकर (फ़ाइल जीएडिट में संपादित किया जा रहा है (आवश्यक पुनः लोड)) हूँ।
- मैंने जावा
ProcessBuilder
कक्षा की कोशिश की लेकिन एक ही परिणाम होता है। - जब मैं अन्य आदेशों के साथ
Runtime.exec()
याProcessBuilder
का उपयोग करता हूं (जैसेgedit newFile.txt
) वे अच्छी तरह से काम करते हैं। - विडंबना यह है कि मैंने जावा से उपरोक्त पर्ल कमांड मुद्रित किया है और पेस्ट टर्मिनल में ले लिया है और प्रतिस्थापन ऑपरेशन किया गया है!
- उन आदेशों का उपयोग करके कोई अपवाद या त्रुटियां नहीं। (मैंने यह सुनिश्चित करने के लिए कोशिश की और पकड़ लिया)।
- मैंने cml में
perl
के बजाय/usr/bin/perl
का उपयोग किया ताकि यह सुनिश्चित किया जा सके कि perl cmd निष्पादित किया गया हो।
तो आपको क्या लगता है कि समस्या है?
संपादित करें:
मैं सिर्फ जावा में आदेश से उद्धरण चिह्न निकाल इस समस्या का समाधान। मदद के लिए @ikegami के लिए धन्यवाद। तो काम कर संस्करण है:
perl -pi.back -e s/str1/str2/g; path/to/file1.txt
बजाय
perl -pi.back -e 's/str1/str2/g;' path/to/file1.txt
'exec()' आपको 'प्रक्रिया 'देता है, इसमें' getInputStream() 'और' getErrorStream() 'विधियां हैं जो आपको प्रक्रिया के उत्पादन के आउटपुट को वापस लौटाती हैं। देखें कि यह प्रक्रिया क्या आउटपुट करती है। –
ओएस के आधार पर, आपके जावा प्रोग्राम में शायद पर्ल का मार्ग नहीं है। आपको पर्ल बाइनरी में पूरा पथ डालना होगा। ऐसा करने का यह एकमात्र तरीका नहीं है, लेकिन सबसे सरल तरीकों में से एक है। – octopusgrabbus
@DenisTulskiy मैंने पहले ही यह किया है। वे कुछ भी आउटपुट नहीं करते हैं। – a90