2011-10-01 5 views
9

यह साथ एक पाठ फ़ाइल शुरू करने से स्काला में शेल स्क्रिप्ट लिखने के लिए संभव है:छोटा स्काला स्क्रिप्ट हेडर

#!/bin/sh 
exec scala "$0" "[email protected]" 
!# 

स्क्रिप्ट निर्माण को कम करने के लिए, मैं एक निष्पादन योग्य (शायद एक bash स्क्रिप्ट) scalash बुलाया लिखने के लिए चाहते हैं अनुमति देता है स्कैला स्क्रिप्ट हेडर को केवल एक पंक्ति में छोटा करने के लिए:

#!/bin/scalash 

क्या यह संभव है? अतिरिक्त अंक यदि मैं वैकल्पिक पैरामीटर को scalash पर पास कर सकता हूं, उदाहरण के लिए क्लासपाथ निर्भरताओं को जोड़ना।

+0

नहीं यहाँ यकीन है, लेकिन मुझे लगता है कि [ "केवल एक पैरामीटर"] (http: // linux। die.net/man/2/execve) शेबांग लाइन का प्रतिबंध ओएस से आता है; पता नहीं, क्या आप इसके बारे में कुछ कर सकते हैं। – Dirk

उत्तर

17

स्काला 2.11 में, आप इसे (वास्तव में सबसे अन्य भाषाओं के साथ के रूप में) के रूप में कर सकते हैं:

:

#!/usr/bin/env scala 
println(args.mkString(" ")) 

स्काला 2.9.0.1, आप बस निम्न स्क्रिप्ट बना सकते हैं

test.scala

#!/usr/bin/scala 
!# 
println(args.mkString(" ")) 

और इसे निष्पादन योग्य बनाएं। (अपने निष्पादन के लिए पथ के लिए पहली पंक्ति को बदलने)

उपयोग:

# ./test.scala Hello world! 
Hello world! 
+6

आप पहली पंक्ति '#!/Usr/bin/env scala' भी बना सकते हैं। तब तक काम करना चाहिए जब तक 'स्कैला' बाइनरी 'पथ' में न हो, जरूरी नहीं कि '/ usr/bin /' में। –

+1

मैं 2.10.2 चला रहा हूं और "लाइन 2:! #: कमांड नहीं मिला" – javadba

+0

@javadba - ऐसा लगता है कि आपने किसी भी तरह गलत दुभाषिया को पकड़ लिया है। क्या आप अपनी .scala फ़ाइल कहीं कहीं पेस्ट कर सकते हैं? – Rogach

8

देखें this pull request (this था)। इसके साथ कोई समस्या नहीं है - अगर आपको ऐसा लगता है, तो आप पुल अनुरोध पर कोई समस्या खोल सकते हैं और टिप्पणी कर सकते हैं।

आप स्क्रिप्ट शुरू करने के लिए एसबीटी का भी उपयोग कर सकते हैं। scalashere के बारे में जानकारी देखें।

संपादित

पुल अनुरोध स्वीकार कर लिया गया है, तो यह काम करना चाहिए:

#!/usr/bin/env /path/to/scala 
etc 
+0

वह लिंक एक पूरी तरह से असंबंधित पुल अनुरोध को इंगित करता है। – javadba

+0

@javadba धन्यवाद। उस लिंक ने svn भंडार के पुराने दर्पण को इंगित किया, जिसे वर्तमान गिट भंडार द्वारा प्रतिस्थापित किया गया था। मैंने इसे ठीक कर दिया है, और साथ ही साथ दूसरा लिंक भी चला गया है। –

+0

मुझे आशा है कि पुल स्वीकार हो जाएगा। वर्तमान स्थिति का मतलब है कि डिबगर्स उलझन में हैं - रेखा संख्या # के बीच की रेखाओं की संख्या से बंद है! और! # – javadba