2010-08-08 5 views
8

मैंने कोशिश की है:ओएस एक्स पर एक शेल स्क्रिप्ट से क्लोजर सीएल (लिस्प) कैसे चलाएं?

$ /Applications/ccl/dx86cl64 
Welcome to Clozure Common Lisp Version 1.5-r13651 (DarwinX8664)! 

? 

क्या यह संभव है करने के लिए एक खोल स्क्रिप्ट लिखने के लिए:

$ cat args.sh 
\#! /Applications/ccl/dx86cl64 
(format t "~&~S~&" *args*) 

$ ./args.sh 

मैं सीधे तुतलाना ठीक चला सकते हैं से ./args.sh

तुतलाना ढेर छवि लोड नहीं कर सका क्लोजर सीएल के साथ लिस्प कोड चलाएं? मुझे यकीन है कि मैं कुछ मूर्खतापूर्ण कर रहा हूं।

मैं से यह स्थापित: http://openmcl.clozure.com/

उत्तर

6

चार्ली मार्टिन के उत्तर और आपके बाद के प्रश्न पर बस पालन करें। dx86cl64 --eval <code> एक आरईपीएल को आग लगा देगा, इसलिए यदि आप किसी दिए गए स्क्रिप्ट को फायर करना चाहते हैं तो छोड़ दें, बस इसे अपनी स्क्रिप्ट के अंत में जोड़ें: (ccl::quit)। उदाहरण आपके द्वारा दी गई अलावा, इस चाल करना होगा:

#! /bin/bash 
exec /Applications/ccl/dx86cl64 --eval '(progn (format t "hello script") (ccl::quit))' 

एक अच्छे स्क्रिप्ट निम्न होगा:

#! /bin/bash 
exec /Applications/ccl/dx86cl64 -b -e '(progn (load "'$1'") (ccl::quit))' 

रखो जो किसी फ़ाइल में, load-ccl-script.sh (या अपनी पसंद की अन्य नाम)। फिर निम्नलिखित इंटरैक्शन काम करता है:

$ echo '(format t "weeee!")' > a.lisp 
$ sh load-ccl-script.sh a.lisp 
weeee! 
$ _ 
+0

धन्यवाद! (मुझे लगता है कि 'sh' 'sh load-ccl-script.sh a.lisp' में अनावश्यक है ...) –

+0

सच है, लेकिन इसके बिना मुझे 'chmod + x load-ccl-script शामिल करना होगा। sh' line - 3 वर्ण थोड़ा अधिक संक्षिप्त थे, और चूंकि यह स्निपेट का उद्देश्य नहीं था, मैं आलसी तरीके से चला गया :) – Edgar

0

आप सुनिश्चित करने के लिए, कि गिरी एक लिस्प स्मृति छवि को लोड कर सकते हैं। डिफ़ॉल्ट व्यवहार कर्नेल के लिए एक फ़ाइल को देखने के लिए है, जिसे कर्नेल बाइनरी जैसे ".image" के साथ नामित किया गया है, यानी, यदि आप dx86cl64 का उपयोग कर सीसीएल शुरू करते हैं, तो लोड की गई छवि dx86cl64.image उसी निर्देशिका से है। आप इस व्यवहार को --image विकल्प का उपयोग करके छवि की आपूर्ति करके संशोधित कर सकते हैं। अधिक जानकारी के लिए dx86cl64 --help आज़माएं।

2

मुद्दा अपनी कुटिया कतार में है:

\#! /Applications/ccl/dx86cl64 

एक UNIX फ़ाइल में, पहले 16 बिट "जादुई संख्या" कहा जाता है। ऐसा होता है कि एक निष्पादन योग्य स्क्रिप्ट के लिए जादू संख्या "#!" वर्णों के समान विन्यास है। आपकी फ़ाइल के पहले 16 बिट्स में समान विन्यास "\ #" है, और यूनिक्स इसे नहीं खरीदेंगे।

जादू संख्याएं जोड़ना संभव है, लेकिन यह आसान या पोर्टेबल नहीं है, इसलिए आपको स्क्रिप्ट को आमंत्रित करने का एक तरीका है। मैं सुझाव देता हूं कि

#! /bin/bash 
exec /Applications/ccl/dx86cl64 

आपकी स्क्रिप्ट के लिए उपयुक्त तर्क आदि के साथ। (exec builtin forking बिना नामित निष्पादन से भरा हुआ वर्तमान प्रक्रिया का कारण बनता है, तो आप एक अतिरिक्त प्रक्रिया के बारे में झूठ बोल रही है की जरूरत नहीं है।)

अद्यतन

अपने विशेष मामले में , आपको कुछ

@! /bin/bash 
exec /Applications/ccl/dx86cl64 --eval '(format t "~&~S~&" *args*)' 

कुछ क्यों चाहिए command line args for Clozure देखें।

+0

सुझाव के लिए धन्यवाद। मैंने यह कोशिश की: #!/बिन/बैश निष्पादन/अनुप्रयोग/सीसीएल/डीएक्स 86cl64 - औसत '(प्रारूप टी "हैलो स्क्रिप्ट")' यह काम करता है, सिवाय इसके कि मुझे विधि निष्पादित करने के बाद lisp प्रॉम्प्ट मिलता है। मैं लूप से कैसे बाहर निकल सकता हूं? $ ./args.sh हैलो स्क्रिप्ट क्लोजर कॉमन लिस्प संस्करण 1.5-आर 13651 (डार्विनएक्स 8664) में आपका स्वागत है! ? –

+0

(अलविदा) मुझे विश्वास है। –

+1

कम से कम तब तक क्लोजर 1.4 '(अलविदा)' उपलब्ध नहीं है। '(सीसीएल :: छोड़ो)' हालांकि, है (यदि आप 'सीसीएल' पैकेज पर हैं तो '(' छोड़ें)' भी काम करेगा)। – Edgar

0

अपनी सीसीएल निर्देशिका की स्क्रिप्ट उपनिर्देशिका देखें। इसमें कुछ स्क्रिप्ट होनी चाहिए जिन्हें आप अनुकूलित और उपयोग कर सकते हैं।

+0

मैंने किया। दुर्भाग्य से वे लिप कोड स्क्रिप्ट नहीं हैं, लेकिन खोल उपयोगिताओं। –

0

आप कमांड लाइन से इस तरह स्क्रिप्ट फोन नहीं कर सकते हैं:

/Applications/ccl/dx86cl64 myscript 

आप कर सकते हैं?

मुझे लगता है कि आप (मैं Clozure सीएल यहाँ की जरूरत नहीं है, इसलिए मैं परीक्षण नहीं कर सकते) इस तरह यह कॉल करने के लिए की जरूरत है:

/Applications/ccl/dx86cl64 -b -l myscript 

तो, अपनी स्क्रिप्ट इस तरह शुरू कर देना चाहिए:

#!/Applications/ccl/dx86cl64 -b -l 
... 
संबंधित मुद्दे