क्लोजर के साथ खोल आदेशों को निष्पादित करने के लिए मुझे (use '[clojure.java.shell :only [sh]])
मिला। अब, जबकि (sh "ls" "-a")
नौकरी करता है, (sh "ls" "-a" "| grep" "Doc")
नहीं करता है। चाल क्या है?क्लोजर: पाइपिंग के साथ खोल कमांड कैसे निष्पादित करें?
उत्तर
clojure.java.shell/sh
एक कमांड निर्दिष्ट तर्क के साथ (पहला तर्क sh
कार्य करने के लिए पारित कर दिया) (मापदंडों sh
के लिए पारित के बाकी) निष्पादित करता है।
जब आप निष्पादित करें:
(sh "ls" "-a" "| grep" "Doc")
आप मापदंडों -a
, | grep
और Doc
साथ ls
निष्पादित करने के लिए पूछना।
आप अपने टर्मिनल में ls -a | grep Doc
टाइप करते हैं तो खोल ls
को क्रियान्वित करने, अपने एसटीडी बाहर ले और एक अन्य प्रक्रिया (grep
) कि खोल द्वारा शुरू किया जाना चाहिए करने के लिए एसटीडी के रूप में इसे पारित के रूप में यह व्याख्या करता है।
आप एक प्रक्रिया के रूप में ls
शुरू करके खोल कर सकते हैं, इसके std आउटपुट लेते हैं और उसके बाद grep
ls
से इनपुट इनपुट के रूप में आउटपुट निष्पादित करते हैं।
सरल समाधान सिर्फ सब कुछ पर अमल करने के लिए एक shell
प्रक्रिया पूछने के लिए किया जाएगा, जैसे कि वह टर्मिनल में टाइप किया गया था: तो पार्टी उन्हें हो जाता है
(sh "bash" "-c" "ls -a | grep Doc")
यह महत्वपूर्ण है अलग तर्कों के रूप -c
और ls ...
पारित करने के लिए एक अलग पैरामीटर। आपको एक पूर्ण स्ट्रिंग (ls -a | grep Doc
) के रूप में निष्पादित करना भी पूरा आदेश होना चाहिए। अन्यथा -c
के बाद केवल पहला तर्क कमांड के रूप में माना जाएगा। उदाहरण के लिए यह आप चाहते हैं क्या काम नहीं चलेगा:
(sh "bash" "-c" "ls -a" "|" "grep Doc")
- 1. एक खोल कमांड निष्पादित करें
- 2. पायथन - पाइप के साथ खोल कमांड कैसे निष्पादित करें?
- 3. के साथ खोल कमांड निष्पादित | (पाइप) एनएसटीस्क
- 4. जेनकींस - वाइल्डकार्ड के साथ खोल कमांड निष्पादित करें
- 5. एक MySQL क्लाइंट के भीतर से खोल कमांड निष्पादित करें?
- 6. पाइपिंग echo कमांड
- 7. खोल से ओपन टर्मिनल और कमांड निष्पादित करें
- 8. बाहरी कमांड निष्पादित करें
- 9. खोल कमांड
- 10. कमांड लाइन: पाइपिंग परिणाम आरएम
- 11. असफल $ (खोल) कमांड को कैसे बाधित करें
- 12. पाइपिंग
- 13. संकलन कार्य से पहले खोल कमांड को निष्पादित करने के लिए कैसे करें?
- 14. कर्नेल प्रोग्रामिंग में खोल कमांड को निष्पादित करने के लिए कैसे करें?
- 15. पाइपिंग अजगर
- 16. खोल कमांड
- 17. डॉकर निष्पादन के साथ दो कमांड निष्पादित करें
- 18. क्लोजर के साथ कमांड लाइन में मैं निर्देशिका कैसे बदलूं?
- 19. एकल लाइन खोल कमांड
- 20. यूनिक्स कमांड लाइन के साथ निष्पादित करें। (डॉट) बनाम
- 21. पाइपिंग
- 22. रिमोट पीसी पर डॉस कमांड कैसे निष्पादित करें?
- 23. जेनकिन्सफाइल से खोल कमांड
- 24. निष्पादित खोल NSTask साथ आदेश - ऑब्जेक्टिव-सी कोको
- 25. फ़ाइलों और फ़ोल्डरों की प्रतिलिपि बनाने के लिए सरल खोल स्क्रिप्ट और कमांड को निष्पादित करें
- 26. पाइपिंग
- 27. build.gradle से गिट कमांड निष्पादित करने के लिए कैसे करें?
- 28. विंडोज एक्सपी कमांड खोल
- 29. खोजने के लिए पाइपिंग इनपुट
- 30. नए खोल में बैश कमांड चलाएं और इस कमांड को
यह एक बहुत ही अच्छी तरह से समझाया जवाब है, धन्यवाद! अब सिर्फ शुद्ध ज्ञान के लिए, वास्तव में '(": आउट (sh" ls "" -a ") के आउटपुट को भेजकर ऐसा करने का एक तरीका है)' दूसरे को '(sh" grep "" डॉक्टर ")'? – shakedzy
आप पिछली प्रक्रिया से ': आउट' के मान को पारित करने के लिए 'sh' के' इन 'विकल्प का उपयोग कर सकते हैं। हालांकि, इसका उपयोग करके आप एक प्रक्रिया से दूसरे प्रक्रिया में डेटा स्ट्रीमिंग की सुविधा खो देते हैं - आप सभी को बफर करेंगे एक प्रक्रिया से आउटपुट और जब यह खत्म हो जाता है तो आप अपनी सभी सामग्री को दूसरे में पास कर देंगे। शैल पाइपलाइनों का उपयोग करती है जहां डेटा को एक प्रक्रिया से दूसरी प्रक्रिया में स्ट्रीम किया जाता है, बिना सब कुछ बफर करने की आवश्यकता के। आप 'java.lang.Runtime.exec()' और 'java.lang.Process.getOutputStream' पहली प्रक्रिया से आउटपुट डेटा प्राप्त करने के लिए और इसे अगली तक पास करने के लिए, लेकिन क्लोजर 'sh' इसका समर्थन नहीं करता है। –
आप https: // github पर भी एक नज़र डाल सकते हैं .com/Raynes/conch। यह पाइपलाइनों का समर्थन करता है: https://github.com/Raynes/conch#piping –