2013-07-03 7 views
21

रूबी प्रोग्राम की शुरुआत में निम्न आदेश लिखने का क्या उपयोग है?रूबी प्रोग्राम की शुरूआत में "#!/Usr/local/bin/ruby ​​-w" का उपयोग क्या है

#!/usr/local/bin/ruby -w 

क्या यह ओएस विशिष्ट कमांड है? क्या यह खिड़कियों पर रूबी के लिए मान्य है? यदि नहीं, तो विंडोज़ में समकक्ष कमांड क्या है?

उत्तर

12

कुटिया लाइन वैकल्पिक है, और आप गहरे लाल रंग का दुभाषिया चलाने के लिए और अगर स्क्रिप्ट पारित यह कमांड लाइन तर्क के रूप में, फिर कमांड लाइन पर सेट किए गए झंडे झंडे के साथ चलते हैं।

एक शेबांग लाइन बिल्कुल रूबी नहीं है (जब तक कि आप इसे एक रूबी टिप्पणी नहीं कहें)। यह वास्तव में खोल स्क्रिप्टिंग है। अधिकांश लिनक्स और यूनिक्स उपयोगकर्ता बाश खोल (बोर्न अगेन शेल के लिए खड़े हैं) चला रहे हैं, लेकिन हर ओएस में कमांड दुभाषिया है जो शेबांग का सम्मान करेगा।

"#!/Usr/स्थानीय/bin/माणिक डब्ल्यू"

"वह" भाग octothorp (#), हैश चिह्न संख्या चिह्न, हैश निशान, और अब हैश टैग उर्फ ​​है (मैं अभी भी इसे टिक-टैक-टो को कॉल करें)।

"बैंग" भाग उद्घोषणा चिह्न (!) है, और यह कमांड को उजागर करने के लिए तालिका पर अपनी मुट्ठी को टक्कर देने जैसा है।

विंडोज़ पर, "शैल" कमांड प्रॉम्प्ट है, लेकिन ब्लैक डॉस विंडो के बिना भी, कमांड दुभाषिया फ़ाइल एसोसिएशन के आधार पर स्क्रिप्ट चलाएगा। यह वास्तव में कोई फर्क नहीं पड़ता कि कमांड दुभाषिया या प्रोग्रामिंग लैंगू शेबांग पढ़ रहा है और यह सुनिश्चित कर रहा है कि झंडे सम्मानित हों, महत्वपूर्ण बात यह है कि उन्हें सम्मानित किया जाता है।

"-w" एक ध्वज है। असल में यह स्क्रिप्ट चलाने के लिए रूबी के लिए एक निर्देश है जब यह स्क्रिप्ट चलाता है।इस मामले में "-w" चेतावनियां चालू करता है, इसलिए आपको स्क्रिप्ट के निष्पादन के दौरान अतिरिक्त चेतावनियां मिलेंगी (स्क्रिप्ट चलती रहती है) या त्रुटियां (स्क्रिप्ट चलना बंद हो जाती है)। कार्यक्रम के दौरान चेतावनी और अपवादों को पकड़ा और कार्य किया जा सकता है। इन सहायता प्रोग्रामर को ऐसी समस्याएं मिलती हैं जो अप्रत्याशित व्यवहार की ओर ले जाती हैं।

मैं नौकरी पाने के लिए त्वरित और गंदे स्क्रिप्ट का प्रशंसक हूं, इसलिए नहीं। मैं उच्च गुणवत्ता वाले पुन: प्रयोज्य कोडिंग का भी प्रशंसक हूं, इसलिए निश्चित रूप से उपयोग करें। सही नौकरी के लिए सही उपकरण। यदि आप सीख रहे हैं, तो हमेशा -w का उपयोग करें। जब आप जानते हैं कि आप क्या कर रहे हैं, और त्वरित कार्यों पर -w का उपयोग करना बंद कर देते हैं, तो आप यह समझना शुरू कर देंगे कि जब यह घंटों में परेशानी की शूटिंग करने के बजाय उपयोग करने में मदद करेगा। (संकेत, जब किसी समस्या का कारण बहुत स्पष्ट नहीं है, तो बस जोड़ें और इसे प्राप्त करने के लिए इसे चलाएं)।

"-w" के लिए कुछ अतिरिक्त कोडिंग की आवश्यकता होती है ताकि आप इसका मतलब समझ सकें, इसलिए यह चीजों को तुरंत हल नहीं करता है, लेकिन यदि आप पहले ही कोड लिखते हैं, तो आपको अधिक परेशानी नहीं होगी चेतावनियों के साथ एक छोटी लिपि चलाने के लिए आवश्यक बिट्स। वास्तव में, यदि आप का उपयोग करने के लिए उपयोग किया जाता है, तो आप शायद पहले से ही कोड लिख रहे हैं और जब तक आप कुछ भूल गए हैं, तब तक कुछ भी नहीं बदलेगा। रूबी को बहुत कम "नलसाजी कोड" की आवश्यकता होती है, तो सबसे अधिक (शायद सभी) संकलित भाषाओं जैसे सी ++, इसलिए उपयोग करने का चयन नहीं करना -w आपको अधिक टाइपिंग सहेजने की अनुमति नहीं देता है, यह आपको स्क्रिप्ट चलाने की कोशिश करने से पहले कम सोचने देता है (IMHO)।

-v वर्बोज़ मोड है, और स्क्रिप्ट के चलते नहीं बदलता है (कोई चेतावनी नहीं उठाई जाती है, नई जगहों पर स्क्रिप्ट को रोक नहींती है)। कई साइट्स और चर्चाएं कॉल-वे वर्बोज़ मोड, लेकिन -w चेतावनी मोड है और यह स्क्रिप्ट के निष्पादन को बदलती है।

+0

'-w' ध्वज के विस्तृत स्पष्टीकरण के लिए धन्यवाद! – lacostenycoder

48

इसे Shebang कहा जाता है। यह प्रोग्राम लोडर को फ़ाइल निष्पादित करने के लिए उपयोग करने के लिए कमांड को बताता है। तो जब आप ./myscript.rb चलाते हैं, तो यह वास्तव में /usr/local/bin/ruby -w ./myscript.rb पर अनुवाद करता है।

विंडोज एक ही उद्देश्य के लिए फ़ाइल एसोसिएशन का उपयोग करता है; शेबांग लाइन का कोई प्रभाव नहीं है (संपादित करें: एफएमसी का जवाब देखें) लेकिन कोई नुकसान नहीं होता है।

एक पोर्टेबल तरीका (कार्य, कहते हैं, Cygwin के तहत और RVM) होगा:

#!/usr/bin/env ruby 

यह पता लगाने की जहां रूबी दुभाषिया है env आदेश का उपयोग करेंगे, और इसे चलाने के।

संपादित करें: जाहिर है, ठीक है, ठीक है, सिगविन /usr/bin/env ruby -w के साथ गलत व्यवहार करेगा और ruby के बजाय ruby -w को देखने का प्रयास करें। आप स्क्रिप्ट में -w का प्रभाव डाल सकते हैं।

+0

मुझे लगता है -w वर्बोज़ मोड सक्षम करने या त्रुटि रिपोर्टिंग को सक्षम करने के लिए संदर्भित करता है। चूंकि #!/Usr/local/bin/ruby ​​-w विंडोज़ के लिए कोई समझ नहीं लेता है, फाइल एसोसिएशन के लिए हमें प्रोग्राम की शुरुआत में कोई कथन जोड़ने की ज़रूरत है? – simminni

+0

विंडोज के लिए, बस रुबी निष्पादन योग्य के साथ '.rb' फ़ाइलों को संबद्ध करें, जहां भी हो। – Koterpillar

+0

मेरे संदेह को स्पष्ट करने के लिए धन्यवाद। – simminni

8

हालांकि शेबांग लाइन का निष्पादन व्यवहार सीधे विंडोज़ दुनिया में अनुवाद नहीं करता है, उस पंक्ति में झंडे शामिल हैं (उदाहरण के लिए -w आपके प्रश्न में) चल रहे रूबी स्क्रिप्ट को प्रभावित करते हैं।

एक Windows मशीन पर उदाहरण 1: एक Windows मशीन पर

#!/usr/local/bin/ruby -w 
puts $VERBOSE # true 

उदाहरण 2:

+2

मुझे यकीन नहीं है कि यह यहां पूछने के लिए प्रासंगिक है, लेकिन क्या आप कृपया मुझे बता सकते हैं कि VERBOSE वैश्विक चर की भूमिका क्या है? – simminni

+1

@ सिममिनी यदि आप 'रूबी-एच' चलाते हैं तो आपको एक बुनियादी (लेकिन बहुत उपयोगी नहीं) उत्तर मिलेगा: '-w' ध्वज "आपकी स्क्रिप्ट के लिए चेतावनियां चालू करेगा"। कुछ और संदर्भ के लिए इस पोस्ट को देखें: http://mislav.uniqpath.com/2011/06/ruby-verbose-mode। मेरी सलाह: यदि आपकी स्क्रिप्ट एक विशिष्ट मूल्य वाले '$ VERBOSE' पर निर्भर करती है, तो इसे स्पष्ट रूप से स्क्रिप्ट में सेट करें (शेबैंग लाइन ध्वज पर भरोसा न करें)। – FMc

संबंधित मुद्दे