2011-03-29 7 views
15

क्या फ़ाइल की शुरुआत में घोषणा करना संभव है कि इसे ग्रोवी स्क्रिप्ट के रूप में निष्पादित किया जाना चाहिए?शेबांग और ग्रोवी

अन्य स्क्रीप्टिंग भाषाओं के लिए उदाहरण:

#!/bin/sh 
#!/usr/bin/python 
#!/usr/bin/perl 
+7

यह आसान है जब आप जानते हैं कि #! जिसे "शेबांग" कहा जाता है, जैसा कि आप टिप्पणियों से देख सकते थे मुझे इसके बारे में पता नहीं था .. – Nulldevice

+0

ध्यान दें कि शेबांग लाइन पर पहला शब्द बाइनरी निष्पादन योग्य होना चाहिए। यदि ऐसा होता है कि आपका "ग्रोवी" प्रोग्राम एक शेल स्क्रिप्ट है, तो आपको '#!/Usr/bin/env groovy' फ़ॉर्म का उपयोग करना होगा। –

+1

मजाकिया बात यह है कि यह वास्तव में इस पृष्ठ पर लौटता है। स्टैक ओवरफ्लो वास्तव में सबसे अच्छा संसाधन है, यहां तक ​​कि इस तरह के सरल प्रश्नों के लिए भी। अन्य लोग सीधे यहां आएंगे और विभिन्न ब्लॉग पोस्टों के माध्यम से ब्राउज़ करने के बजाय आधिकारिक उत्तर प्राप्त करेंगे। –

उत्तर

39

यह एक #!/usr/bin/env groovy
अपना रास्ता तलाश में खोज करेंगे स्क्रिप्ट

+3

एक सीमा यह है कि लिनक्स पर शेबैंग का उपयोग करते समय आप किसी भी तर्क (क्लासपाथ की तरह) को ग्रोवी नहीं दे सकते। [यह उत्तर] देखें (http://stackoverflow.com/a/8945888/54396)। – Patrick

5

this के अनुसार आप #!/usr/bin/groovy उपयोग कर सकते हैं (यह है कि यदि उसके स्थान है)। खोज शब्द जिसे आप ढूंढ रहे हैं shebang (जो कि पहली पंक्ति कहा जाता है) है।

+0

धन्यवाद!यह मुझे ज्ञात था कि संयोजन #! विशेष नाम है, लेकिन मैं इसे याद रखने में विफल रहा। – Nulldevice

+0

यदि यह आपको याद रखने में मदद करता है, तो लाइन के लिए प्रारंभिक प्रतीकों "तेज" ** ** ** और एक इंटरबैंग ** ** ** हैं, इसलिए शब्द "शेबांग" है। – mfortner

+0

@mfortner एक अच्छा निमोनिक है, लेकिन विस्मयादिबोधक बिंदु एक धमाका है, एक interrobang नहीं। एक [interrobang] (https://en.wikipedia.org/wiki/Interrobang) संयोजन विस्मयादिबोधक बिंदु/प्रश्न चिह्न प्रतीक (‽) है। –

1

एक आम चाल एक स्क्रिप्ट एक से अधिक भाषा में अर्थ है कि, यह भी एक "बहुभाषी" स्क्रिप्ट के रूप में जाना लिखना है निष्पादित करने के लिए ग्रूवी।

बैश और ग्रूवी के मामले में, यह विशेष रूप से आसान है:

#!/bin/sh 
//bin/true; exec groovy -cp .. "$0" 

println "Hello from Groovy" 
  1. पहली पंक्ति एक कुटिया (#!) है कि ओएस बताता है एक नियमित रूप से खोल स्क्रिप्ट के रूप में स्क्रिप्ट चलाने के लिए है।
  2. दूसरी पंक्ति, जब खोल द्वारा निष्पादित की जाती है, /bin/true कमांड (नो-ऑप) को आमंत्रित करती है; फिर पाथ में निष्पादन योग्य groovy पाता है और इसे स्क्रिप्ट फ़ाइल ("$0") पर चलाता है और अतिरिक्त तर्क, वर्तमान खोल प्रक्रिया (exec)
  3. ग्रोवी पहली पंक्ति को अनदेखा कर देगा, क्योंकि यह एक शेबांग है; यह दूसरी पंक्ति को अनदेखा कर देगा क्योंकि यह एक टिप्पणी है (//) और शेष स्क्रिप्ट चलाएगा।

आप एक अधिक विस्तृत खोल भाग की जरूरत है, हो सकता है वातावरण चर की स्थापना की है, या जहां ग्रूवी स्थापित किया गया है, तो आप एक अलग चाल का उपयोग कर सकते खोज के लिए:

#!/bin/sh 
'''': 
echo Hello from Shell 
exec groovy -cp .. "$0" 
''' 

println "Hello from Groovy" 
  1. फिर, कुटिया संकेत ओएस को इस फाइल को शेल स्क्रिप्ट के रूप में निष्पादित करना प्रारंभ करना है।
  2. शैल पार्स '''': दो रिक्त तार '' के रूप में एक कोलन के बाद, जो नो-ऑप है।
  3. खोल, फ़ाइल के बाकी, लाइन द्वारा लाइन पर अमल जब तक यह एक exec या एक exit
  4. मिलेगा तो सब कुछ ठीक है, खोल स्क्रिप्ट फ़ाइल स्वयं ("$0")
  5. पर ग्रूवी आदेश चलेंगे
  6. ग्रोवी शेबैंग लाइन को छोड़ देगा, फिर यह '''': को लंबे स्ट्रिंग ''' की शुरुआत के रूप में पार्स करेगा, इस प्रकार सभी शेल कमांड को छोड़ देगा, और फिर बाकी स्क्रिप्ट चलाएगा।