5

चिकन योजना में मैं विश्वसनीय रूप से स्क्रिप्ट नाम कैसे प्राप्त कर सकता हूं?

ऐसा लगता है कि -एसएस स्क्रिप्ट नाम खाता है, इसलिए यह तब तक दिखाई नहीं दे रहा है जब तक कि मैं अपनी स्क्रिप्ट चलाने के लिए डॉट स्लैश का उपयोग नहीं करता।

scriptedmain.scm:

#!/usr/bin/env csi -q 

(display (command-line-arguments)) 
(display "\n") 
(exit) 

ट्रेस: ​​

$ ./scriptedmain.scm 
(-q ./scriptedmain.scm) 
wonko:Desktop andrew$ csi -ss scriptedmain.scm 
() 

उत्तर

6

यह देर से प्रतिक्रिया है, इसलिए मूल पोस्टर के लिए उपयोग नहीं किया जा सकता है।

(program-name) 

यह सभी परिस्थितियों के लिए सही नाम वापस आना होगा: लेकिन किसी भी अन्य जो इस सवाल का दिखाई दे सकते हैं, इसका सरल उत्तर पैरामीटर का उपयोग करने के लिए है। Docs here.

+0

कभी भी बेहतर देर से नहीं। धन्यवाद दोस्त! – mcandre

+0

मेरा नवीनतम संस्करण संकलित किए गए सभी मामलों के लिए काम करता है। किसी कारण से, यह बस वहां बैठता है। – mcandre

+0

@mcandre: सुनिश्चित नहीं है कि "संकलित किए गए सभी मामलों" के द्वारा आपका क्या मतलब है। मैंने नीचे अपना उदाहरण scriptedmain.scm देखा - प्रोग्राम-नाम के साथ, और यह एक व्याख्या की गई स्क्रिप्ट के रूप में काम करता है, या एक संकलित देशी निष्पादन योग्य के रूप में। बीटीडब्ल्यू, मैं उस मचान (बाश -> सीएसआई) से परेशान नहीं होगा। इसकी वास्तव में आवश्यकता नहीं है #!/Usr/bin/env चिकन-स्कीम #!/Usr/bin/csi -s –

1

(argv) काम करना चाहिए। उदाहरण:

#!/usr/local/bin/csi -script 

(display (argv)) (newline) (exit) 

प्रिंट (/usr/local/bin/csi -script ./test.scm)

+0

लगभग! आपको विशेष मामले के लिए कोड जोड़ना होगा जहां स्क्रिप्ट सीएससी के साथ संकलित है; तो कार्यक्रम है (सूची-रेफरी (argv) 0)। – mcandre

+0

"स्क्रिप्ट" के साथ मेरा मतलब है "संकलित नहीं"। व्याख्या और संकलित कार्यक्रमों के बीच अंतर करने के अन्य समाधान हैं। – knivil

1

scriptedmain.scm (मुख्य) चलेंगे और निम्नलिखित मामलों में कार्यक्रम का नाम मुद्रित:

csi -ss scriptedmain.scm 

रन: दुभाषिया से

भागो Shebangs का उपयोग कर दुभाषिया से:

./scriptedmain.scm 

संकलित: GitHub को

csc -o scriptedmain scriptedmain.scm 
./scriptedmain 

जोड़ा गया।

#!/bin/sh 
#| 
exec csi -ss $0 ${1+"[email protected]"} 
exit 
|# 

(define (main) 
    (display (format "Program: ~a\n" (program-name))) 
    (exit)) 

(if (not (equal? (program-name) "csi")) 
    (main))