2012-05-10 14 views
14

मैं हैकेल के साथ कुछ खोल स्क्रिप्ट लिख रहा हूं, जिसे मैं गिटबैश में चला रहा हूं, लेकिन कुछ अन्य मौजूदा स्क्रिप्ट्स हैं जिन्हें मैं उन स्क्रिप्ट से उपयोग करने में सक्षम होना चाहता हूं।क्या हैकेल प्रोग्राम से बैश या खोल स्क्रिप्ट का आह्वान करना संभव है?

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

क्या ऐसा करने का कोई तरीका है?

उत्तर

16

आप System.Process का उपयोग कर सकते हैं। उदाहरण के लिए, seq 1 10 शेल कमांड को क्रियान्वित:

> import System.Process 

> readProcess "seq" ["1", "10"] "" 
"1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n" 
it :: String 

> readProcessWithExitCode "seq" ["1", "10"] "" 
(ExitSuccess,"1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n","") 
it :: (GHC.IO.Exception.ExitCode, String, String) 
5
बेशक

। बाहरी प्रक्रियाओं का आह्वान करने के लिए आप system का उपयोग कर शुरू कर सकते हैं।

अधिक परिष्कृत पाइपिंग और प्रक्रिया नियंत्रण System.Process लाइब्रेरी से क्रॉस-प्लेटफ़ॉर्म तरीके में उपलब्ध है।

अंत में, आप अपनी शैल स्क्रिप्ट को हास्केल, via shell DSLs पर पोर्ट करने पर विचार कर सकते हैं।

8

हां, यह संभव है। आप process पैकेज का उपयोग कर सकते हैं, जो कई उपयोगी कार्यों को निर्यात करता है। सरलतम System.Cmd.system है, जो खोल में कुछ एप्लिकेशन चला सकता है, निकास कोड प्रदान करता है।

System.Process मॉड्यूल में भी अधिक उन्नत सुविधाएं प्रदान की जाती हैं। इस मॉड्यूल के साथ आप प्रक्रिया को चला सकते हैं और इसके साथ कई तरीकों से संवाद कर सकते हैं (इनपुट पाइपिंग, निकास कोड, प्रक्रिया को रोकने के लिए इंतजार कर रहे हैं, इसके पर्यावरण को संशोधित कर सकते हैं आदि)।

5

Turtle इसके लिए बहुत अच्छी आधुनिक हैकेल लाइब्रेरी है।

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