2010-04-09 6 views
6

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

मैं जैसी चीजों का परीक्षण करना चाहते:

  1. चाहे पर्ल है कि सिस्टम में इंस्टॉल किए गए
  2. पर्ल संस्करण 5 या अधिक
  3. होना चाहिए चाहे मॉड्यूल JSON :: किसी भी उपलब्ध है

कोई भी सुझाव बहुत सराहना करेंगे :-)

उत्तर

2
if perl -MJSON::Any -e 'print "$JSON::Any::VERSION\n"' >/dev/null 2>&1 
then : OK 
else echo "Cannot find a perl with JSON::Any installed" 1>&2 
    exit 1 
fi 

मैं अक्सर '${PERL:-perl}' और इसी तरह के निर्माणों का उपयोग awk बनाम nawk या gawk के लिए आदेश (पहचान करने के लिए; troff बनाम groff; आदि)।

यदि आप JSON :: किसी भी संस्करण का परीक्षण करना चाहते हैं, तो इसके बजाय कमांड से आउटपुट कैप्चर करें। यदि आप पर्ल के संस्करण का परीक्षण करना चाहते हैं, तो 'use 5.008009;' जोड़ें या जो भी संख्या आपको लगता है वह समझदार है। (यह बहुत समय पहले नहीं था कि उन्होंने अंततः काम पर एनएफएस-माउंटेड फाइल सिस्टम में से एक से पर्ल 4 हटा दिया - लेकिन यह मशीन पर एकमात्र पर्ल नहीं था - कम से कम, पिछले दशक या उससे अधिक में नहीं!)

+0

मैं 'perl -MJSON :: Any -e1 2>/dev/null' पसंद करूंगा - क्या संस्करण को प्रिंट करने और इसे थोड़ा बाल्टी – justintime

+0

@justintime पर भेजने में कोई बात है: जैसा कि मैंने कहा था, अगर आप जांचना चाहते हैं JSON का संस्करण :: कोई भी, आउटपुट कैप्चर करें - यह मुझे यह बताने के लिए सहेजा गया है कि संस्करण को एक अलग अभ्यास के रूप में कैसे पकड़ें। –

8

पर्ल availab जाँच के बारे में perl -v कमांड के रिटर्न कोड (निकास कोड) को जांचने का सबसे आसान तरीका यह है कि यदि यह 0 नहीं है, तो आपके पास पर्ल नहीं है।

अब पर्ल आवश्यकताओं के बारे में है, तो आप चाहिए अपने पर्ल स्क्रिप्ट अंदर से उन लोगों के साथ सौदा:

#!/usr/bin/env perl 
use 5.006_001; 
use ModuleName 2.0; 

पर्ल ऊपर कोड केवल पर्ल 5.6.1 या नए के साथ और modele साथ चलेंगे "ModuleName" संस्करण 2.0 या नया। बैश से पर्ल संस्करण को मैन्युअल रूप से जांचने की कोई आवश्यकता नहीं है, इसे सीधे पर्ल स्क्रिप्ट से करना बेहतर और आसान है।

संदर्भ:

+0

मैं न अधिक जानकारी के प्रिंट करना चाहते हैं, मैं निम्नलिखित स्थानों पहले से किसी में मदद के लिए पूछना बस केवल संस्करण संख्या जानना चाहते हैं, जब मैं perl -v कमांड जारी करता हूं, तो कोई सुझाव – abubacker

+0

आप '5.006_001' उपयोग के साथ खुद को संस्करण संख्या में जांचते हैं। perl -v बस जांचता है कि क्या एक पर्ल बाइनरी निष्पादित की जा सकती है (=> जांचें कि क्या perl इंस्टॉल है), आप इसे प्रिंट करने वाली सभी चीज़ों को अनदेखा कर सकते हैं, केवल निष्पादन मामलों के वापसी मूल्य। – dbemerlin

+0

सवाल पूछता है "क्या सिस्टम पर पर्ल स्थापित है"। आपका उत्तर "पर्ल नहीं मिला" प्रतिक्रिया (पर्ल लापता, या अधिक संभावना है, पीएटीएच पर नहीं) के स्वचालन को रोकता है। अनुमोदित, मेरे द्वारा काम की जाने वाली हर प्रणाली में सिस्टम द्वारा स्थापित पर्ल है - लेकिन प्रश्नकर्ता चिंतित है कि 'वहां पर बिलकुल है'। –

14

नहीं, एक शेल स्क्रिप्ट नहीं लिखें। पर्ल को पहले से ही ऐसा करने का एक बिल्कुल अच्छा तरीका है। ऐसा करने का सही तरीका सामान्य टूलचेन का उपयोग करके एक सीपीएएन-तैयार वितरण बनाना है। इनमें से कुछ को perlnewmod, perlmodstyle और perlmodinstall में समझाया गया है।

एक न्यूनतम काम कर उदाहरण के लिए, एक निर्देशिका लेआउट इस प्रकार बनाने के लिए:

. 
├── Build.PL 
├── README 
└── script 
    └── abuscript.pl 

Build.PL फ़ाइल में डाल दिया:

use 5.000; 
use Module::Build qw(); 
Module::Build->new(
    module_name  => 'abuscript', 
    dist_version  => '1.000', 
    dist_author  => 'abubacker <[email protected]>', 
    dist_abstract  => 'describe what the script does in one sentence', 
    configure_requires => { 
     'perl' => '5.000', 
    }, 
    requires   => { 
     'JSON::Any' => 0, 
    }, 
)->create_build_script; 

बदलें विवरण अपने उद्देश्यों के सूट करने के लिए।

README फ़ाइल में, कुछ स्थापना के निर्देश डाल उदाहरण के लिए:

To install this module, run the following commands: 

perl Build.PL 
./Build install 

बार जब आप सभी कि पूरे कर चुके हैं, तो आप चलाएँ:

perl Build.PL 
./Build manifest 
./Build dist 

यह एक .tar.gz संग्रह में परिणाम होगा जो आप वितरित करेंगे। अपने उपयोगकर्ताओं को इसे किसी भी अन्य सीपीएएन मॉड्यूल की तरह स्थापित करने के लिए कहें, या यदि उन्हें नहीं पता कि इसका क्या अर्थ है, तो उन्हें रीडमी पढ़ना चाहिए।

यदि आपके पास समय है, तो मैं आपकी स्क्रिप्ट को मॉड्यूल में बदलने की अनुशंसा करता हूं। कार्यक्रम pl2pm (पर्ल के साथ आता है) और सीपीएएन मॉड्यूल Module-Starter-PBP आपकी मदद करता है।

यदि लाइसेंस अनुमति देता है, तो अपने उपयोगकर्ताओं के लिए इसे और अधिक सुविधाजनक बनाने के लिए अपना कोड सीपीएएन अपलोड करना संभव है। मेलिंग सूची [email protected], वेब मंच PerlMonks, चुंबक पर आईआरसी चैनल #toolchain (आईआरसी: //irc.perl.org/toolchain)

+0

सीपीएएन मानक के अनुसार, यदि मेरे पास अपनी खुद की .pm फाइलें हैं, तो मुझे इसे Build.PL और फ़ाइल संरचना दोनों में कहां जोड़ना चाहिए? और यदि मेरे पास एक पर्ल स्क्रिप्ट है, तो 'script1.pl' और 'script2.pl' कहें, मैं इसे Build.PL में कैसे जोड़ सकता हूं? module_name => 'script1.pl, script2.pl' ,? मुझे इस पर कोई उदाहरण नहीं मिला। –

+0

उदाहरण: यदि आपके पास पैकेज घोषणा 'Fus :: Roh :: Da' के साथ मुख्य मॉड्यूल है, तो इसे' Da.pm' का नाम दें और इसे 'lib/fus/Roh/da.pm' पर ले जाएं। 'Build.PL' में, [' module_name => 'Fus :: Roh :: Da''] निर्दिष्ट करें (http://p3rl.org/Module::Build::API#module_name)। बस अपनी दो स्क्रिप्ट को उपनिर्देशिका 'स्क्रिप्ट' में रखें, शेष इंस्टॉल समय पर स्वचालित रूप से बाहर काम करता है। - आप 'perl Build.PL --install_base/tmp चलाकर अपनी बिल्ड फ़ाइल का परीक्षण कर सकते हैं; ./build इंस्टॉल करें 'और परिणाम को '/ tmp' dir में जांचें। './build distclean' चलाएं और इंस्टॉल करने के लिए इंस्टॉल की गई फ़ाइलों को मैन्युअल रूप से हटा दें। – daxim

+0

ठीक है, मैंने जो किया आपने किया। अब मेरी स्क्रिप्ट कहां है? मुझे इसे कहीं/usr/bin में कॉपी करने की उम्मीद है, script.pl से स्क्रिप्ट में नाम बदलें और निष्पादन योग्य अधिकार जोड़ें।मुझे जो मिलता है वह एक खाली निर्देशिका है '/ usr/lib/perl5/site_perl/auto/टर्मिनलहेरो'। Btw, बिल्ड धीरे चिल्ला 'के बजाय रूट पासवर्ड के बारे में पूछ सकते !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! त्रुटि: '/ usr/lib/perl5/site_perl/auto/TerminalHero' नहीं बना सकता है '/ usr/lib/perl5/site_perl/auto/TerminalHero' पर लिखने की अनुमति नहीं है !!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!! ' – ciembor

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