2012-08-15 14 views

उत्तर

12

पहले मामले में आप perl दुभाषिया शुरू कर रहे हैं और इसे अपनी फ़ाइल का उपयोग करने और इसे चलाने के लिए कह रहे हैं।

दूसरे मामले में आप अपनी फ़ाइल को निष्पादित करने के लिए अपने खोल पूछ रहे हैं। इसकी आवश्यकता है कि फ़ाइल

#!/<path to perl>/perl 

और फ़ाइल के निष्पादन बिट सेट के साथ शुरू होता है।

उपयोग करने का सबसे अच्छा तरीका वह है जो आपके उपयोगकेस को सर्वोत्तम बनाता है।

+0

तक सही उपयोग करते हुए बिट सेट, आप अनुमतियाँ मतलब निष्पादित, चलते हैं? –

+0

@rad हां, इसे 'chmod' कमांड के साथ सेट करने के रूप में। – HonkyTonk

+0

ठीक है, धन्यवाद! –

3

पहला perl का उपयोग कर प्रोग्राम को निष्पादित करता है जो आपके $PATH में पहले पाया जाता है। प्रोग्राम में जो भी shebang लाइन है, उसका दूसरा उपयोग करता है।

4
  • पहले एक हमेशा perl कोड के रूप में स्क्रिप्ट चलेंगे।
    दूसरा यह केवल तभी करेगा जब पर्ल को उस-बैंग में निर्दिष्ट किया गया हो। अन्यथा यह इसे शैल कोड के रूप में चलाएगा या जो कुछ भी निर्दिष्ट है वह बैंग में है (अगर कोई भी बैंग नहीं है तो यह वर्तमान शेल कोड के रूप में चलाएगा)।

  • पहला वाला भी noexec माउंट विकल्प सक्षम किया जाएगा।
    दूसरा उस मामले में असफल हो जाएगा।

  • निष्पादित बिट के साथ एक ही सामान। पहला 0 काम करेगा यदि +x सेट नहीं है, दूसरा असफल हो जाएगा।

+0

क्या आप निश्चित रूप से गायब हैं शेबैंग सिस्टम शेल के विपरीत "वर्तमान खोल" कोड है? ऐसा लगता है कि यह पूर्व है लेकिन मुझे अनिश्चित है – DVK

15

मैं कुछ अन्य उत्तरों के बारे में बताऊंगा। एक पर्ल भाषा अनुवादक शायद, है, और पहले पैरामीटर के रूप में यह करने के लिए मूल्य "test.pl" पास -

  • पहला मामला कार्यक्रम "पर्ल" कहा जाता चलेंगे। कृपया ध्यान दें है और क्या "test.pl" है कि यह 3 में से एक काम करेंगे, क्या "पर्ल" के आधार पर:

    1. "पर्ल" अपने $PATH या एक खोल में एक निष्पादन योग्य के रूप में मौजूद नहीं है उपनाम (which perl चलाकर जांचें), आपका खोल गैर-मौजूदा निष्पादन योग्य खोजने का प्रयास करेगा, और perl: Command not found त्रुटि के साथ विफल हो जाएगा।

    2. यदि "perl" आपके पथ (या एक खोल उपनाम) में निष्पादन योग्य है जो वास्तव में एक पर्ल दुभाषिया प्रोग्राम नहीं है, जो इसके बजाय निष्पादित हो जाएगा। उदाहरण के रूप में csh में इस प्रयास करें:

      alias perl echo 
      which perl # Will print "perl: aliased to echo" 
      perl test.pl # Will print "test.pl". NOT what you intended! 
      unalias perl 
      

      यह आपका "पर्ल" उर्फ ​​निष्पादित करेंगे और बस शब्द "परीक्षण गूंज।पीएल "

    3. यदि" पार्ल "आपके पथ में एक निष्पादन योग्य है जो वास्तविक पर्ल दुभाषिया है, तो यह पहले पैरामीटर के रूप में" test.pl "को पास करेगा। उस स्थिति में, पर्ल दुभाषिया इस पैरामीटर का इलाज करेगा (क्योंकि यह निष्पादित करने के लिए पर्ल कोड वाली फ़ाइल के नाम के रूप में शुरू नहीं होता है और फ़ाइल को पढ़ने की कोशिश करता है, इसे पर्ल कोड के रूप में संकलित करें और इसे निष्पादित करें।

      ध्यान दें कि, कार्यक्रम के बाद से रन किया जा रहा है वास्तव में "पर्ल" और "test.pl" है सिर्फ एक पाठ फ़ाइल में पढ़ा जा रहा है, "test.pl" "अमल" यूनिक्स फ़ाइल अनुमति की आवश्यकता नहीं है।

  • दूसरा मामला, खोल आपके वर्तमान निर्देशिका में "test.pl" नामक फ़ाइल ढूंढने का प्रयास करेगा, और - यदि यह मौजूद है और निष्पादन योग्य है - इसे प्रोग्राम के रूप में निष्पादित करने का प्रयास करें।

    • फ़ाइल मौजूद नहीं है या यदि उस पर अमल बिट सेट नहीं है, खोल त्रुटि "नहीं मिला आदेश" के साथ असफल हो जायेगी।

    • यदि फ़ाइल निष्पादित बिट सेट है, तो खोलें (या वास्तव में यूनिक्स कर्नेल में लोडर को संसाधित करें) इसे निष्पादित करने का प्रयास करेगा। जिन नियमों से यूनिक्स किसी निष्पादन योग्य फ़ाइल को निष्पादित करता है, वह फ़ाइल के पहले 2 बाइट, उर्फ ​​"जादू संख्या" द्वारा शासित होता है।

      जादू संख्याओं के काम के बारे में बहुत अच्छी गहन कवरेज के लिए, SO पर प्रश्न "How does the #! work?" देखें।

    • एक विशेष मामले में जहां "जादू संख्या" "#!" है (उर्फ "शेबांग"), लोडर फ़ाइल की पहली पंक्ति पढ़ेगा, और उस निष्पादन योग्य फ़ाइल के बजाए चलाने के लिए कमांड के रूप में उस पंक्ति की सामग्री (पहले 2 बाइट्स) को संसाधित करेगा; और निष्पादन योग्य फ़ाइल के पथ को शेबांग लाइन से पढ़ने वाले कमांड के लिए एक और पैरामीटर के रूप में संलग्न करें। उदाहरण के रूप में:

      • अगर "test.pl" #!/bin/sh -x की पहली पंक्ति के साथ एक पाठ फ़ाइल है, कर्नेल /bin/sh -x ./test.pl निष्पादित करेंगे।

      • अगर "test.pl" #!/usr/bin/perl की पहली पंक्ति के साथ एक पाठ फ़ाइल है, कर्नेल /usr/bin/perl ./test.pl निष्पादित करेंगे।

      • अगर "test.pl" #!perl की पहली पंक्ति के साथ एक पाठ फ़ाइल है, कर्नेल perl ./test.pl निष्पादित करेंगे।

      • यदि "test.pl" my $var = 1; की पहली पंक्ति के साथ एक टेक्स्ट फ़ाइल है (या किसी अन्य पहले 2 बाइट्स को यह नहीं पता कि इसके साथ क्या करना है), तो यह या तो त्रुटि होगी या (कम से कम RedHat पर लिनक्स) दिखाएगा कि #!/bin/sh शेबैंग एक अंतर्निहित था और फ़ाइल को बोर्न शेल स्क्रिप्ट के रूप में निष्पादित करने का प्रयास करें। कौन सा कोर्स के असफल हो जायेगी, क्योंकि यह पर्ल कोड था, नहीं खोल स्क्रिप्ट

-1

पर्ल परीक्षण।pl

  • खोल कि आप वर्तमान पर्ल निष्पादन चाहते हैं (के रूप में अपने $ पथ में पाया जाता है) कि आपके $ पथ में स्थित है test.pl फ़ाइल को निष्पादित करने के लिए निर्दिष्ट करें।
  • भागो जो पर्ल जल्दी से देखने के लिए पर्ल का कौन सा संस्करण डिफ़ॉल्ट
  • भागो गूंज $ पथ जहां देखने के लिए है '।' (वर्तमान निर्देशिका) है। '।' से पहले सभी निर्देशिकाएं test.pl फ़ाइल के लिए FIRST की जांच की जाएगी! इसके बजाय ./test.pl का उपयोग करें ताकि खोल केवल वर्तमान निर्देशिका में दिखता हो ... जब तक आप test.pl फ़ाइल के लिए $ PATH में शिकार नहीं करना चाहते हैं। के रूप में test.pl अंदर निर्दिष्ट

./test.pl

  • , खोल कि आप test.pl फ़ाइल चाहते हैं निर्दिष्ट करें मौजूदा निर्देशिका में, निष्पादन से चलाने के लिए शी-बैंग के साथ लाइन पर फ़ाइल (लाइन जो #! से शुरू होती है)।
+0

perl test.pl $ पाथ की जांच नहीं करेगा। – DVK

0

यू फ़ाइल के लिए निष्पादन योग्य अनुमति सेट है, तो आप फ़ाइल ./ द्वारा वरना चला सकते हैं पर्ल filename.pl

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