2012-11-10 17 views
9

मेरे पास मोनो के साथ एफ # 2.0 स्थापित है, और मैं ./ मेरी एफ # स्क्रिप्ट्स चाहता हूं। मैक ओएस एक्स के लिए मुझे किस शेबांग लाइन का उपयोग करना चाहिए? क्या यह शेबैंग लाइन मैक ओएस एक्स और लिनक्स के लिए सामान्यीकृत की जा सकती है?मैक ओएस एक्स में एफ # स्क्रिप्ट के लिए मुझे किस शेबैंग का उपयोग करना चाहिए?

+0

मुझे लगता है कि यह समस्याग्रस्त हो सकता है क्योंकि '#' F # में कोई टिप्पणी नहीं है - आप बेहतर बैश स्क्रिप्ट लिखना बेहतर हो सकते हैं। यदि आप संकलित स्क्रिप्ट के बारे में बात कर रहे हैं, लिनक्स के लिए '।/'काम करने के लिए कर्नेल पैच है - मैक –

+2

@ जॉन पाल्मर हाँ के बारे में निश्चित नहीं है, एफ # और अन्य भाषाओं में' # 'टिप्पणियों की कमी शेबैंग को और अधिक कठिन बनाती है, हालांकि असंभव नहीं है। http://rosettacode.org/wiki/Multiline_shebang – mcandre

+0

जो काफी साफ है - आप वहां एक संपूर्ण बैश स्क्रिप्ट छिपा सकते हैं जो आपको पोर्टेबिलिटी सामान –

उत्तर

7

तो, @ mcandre के जवाब में, यह काम करता है क्योंकि most shells revert to bourne shell जब वे एक मामला नहीं मिल रहा है।

तो #light जो वैध एफ # और बोर्न शैल में एक टिप्पणी है, प्रत्येक स्क्रिप्टिंग पर्यावरण को यह समझने की अनुमति देता है कि यह क्या समझता है।

हालांकि अंदर लिपि में सुधार किया जा सकता है। जब हम --quiet से --exec जोड़ते हुए एक स्क्रिप्ट निष्पादित करते हैं, तो हम भी सभी तर्कों को स्क्रिप्ट में पारित होने की उम्मीद करते हैं। एक और आदर्श संस्करण exec fsharpi --exec $0 $* होगा, इसलिए सभी तर्क पारित किए जाएंगे जैसे कि आपने आदेश को स्पष्ट रूप से चलाया था।

#light एफ # में पहले से ही # पहले निर्देश नहीं है। प्रीप्रोसेसर परिभाषित भी काम करेगा और क्या हो रहा है इसके बारे में सहज हो सकता है। #if run_with_bin_sh और #endif के बीच एक शेल स्क्रिप्ट डालने से run_with_bin_sh को परिभाषित नहीं किया जाएगा।

उदाहरण FSX:

#if run_with_bin_sh 
    exec fsharpi --exec $0 $* 
#endif 
printfn "%A" fsi.CommandLineArgs 

अद्यतन: इस तरह के #!/usr/bin/env fsharpi --exec रूप रियल कुटिया समर्थन official Microsoft F# code base में जोड़ने की गई है। तो इसे एफ # के भविष्य के संस्करणों के साथ काम करना चाहिए।

अपडेट 2:#!/usr/bin/env fsharpi --exec मैक के लिए बहुत अच्छा काम करता है, लेकिन लिनक्स पर नहीं। लिनक्स #!/usr/bin/fsharpi --execthe incompatibilty is annoying.

यदि आप एक क्रॉस प्लेटफार्म fsharp shebang चाहते हैं। निम्नलिखित काम करेगा।

#!/bin/sh 
#if run_with_bin_sh 
    exec fsharpi --exec $0 $* 
#endif 
+1

'/ bin/usr/env' ??? यह गलत लगता है, क्या एक टाइपो है? मुझे लगता है कि आपका मतलब था '/ usr/bin/env' – knocte

+0

@knocte धन्यवाद! – jbtule

10

मैक ओएस एक्स में, कार्यक्रम fsharpi है।

hello.fs:

#light (* 
    exec fsharpi --exec $0 --quiet 
*) 

System.Console.WriteLine "Hello World" 
+0

यह सचमुच कहीं भी दस्तावेज नहीं है! धन्यवाद। – Noldorin

+0

मैं मान रहा था कि ओपी एफ # स्क्रिप्ट्स (.fsx एक्सटेंशन) के बारे में पूछ रहा था, एफ # फाइलें (.fs एक्सटेंशन) – knocte