मेरे पास मोनो के साथ एफ # 2.0 स्थापित है, और मैं ./
मेरी एफ # स्क्रिप्ट्स चाहता हूं। मैक ओएस एक्स के लिए मुझे किस शेबांग लाइन का उपयोग करना चाहिए? क्या यह शेबैंग लाइन मैक ओएस एक्स और लिनक्स के लिए सामान्यीकृत की जा सकती है?मैक ओएस एक्स में एफ # स्क्रिप्ट के लिए मुझे किस शेबैंग का उपयोग करना चाहिए?
उत्तर
तो, @ 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 --exec
the incompatibilty is annoying.
यदि आप एक क्रॉस प्लेटफार्म fsharp shebang चाहते हैं। निम्नलिखित काम करेगा।
#!/bin/sh
#if run_with_bin_sh
exec fsharpi --exec $0 $*
#endif
मैक ओएस एक्स में, कार्यक्रम fsharpi
है।
hello.fs:
#light (*
exec fsharpi --exec $0 --quiet
*)
System.Console.WriteLine "Hello World"
मुझे लगता है कि यह समस्याग्रस्त हो सकता है क्योंकि '#' F # में कोई टिप्पणी नहीं है - आप बेहतर बैश स्क्रिप्ट लिखना बेहतर हो सकते हैं। यदि आप संकलित स्क्रिप्ट के बारे में बात कर रहे हैं, लिनक्स के लिए '।/'काम करने के लिए कर्नेल पैच है - मैक –
@ जॉन पाल्मर हाँ के बारे में निश्चित नहीं है, एफ # और अन्य भाषाओं में' # 'टिप्पणियों की कमी शेबैंग को और अधिक कठिन बनाती है, हालांकि असंभव नहीं है। http://rosettacode.org/wiki/Multiline_shebang – mcandre
जो काफी साफ है - आप वहां एक संपूर्ण बैश स्क्रिप्ट छिपा सकते हैं जो आपको पोर्टेबिलिटी सामान –