2015-10-01 5 views
5

मुझे लगता है कि एक फ़ाइल के माध्यम से जाना होगा एक उपयोगिता है कि इस प्रकार दिखाई देगा लिखने के लिए कोशिश कर रहा हूँ में आदेश से वापसी कोड और उत्पादन प्राप्त करें:पर्ल

# Directory | file name | action | # of days without modification to the file for the command to take action 
/work/test/|a*|delete|1 
/work/test/|b*|compress|0 
/work/test/|c*|compress|1 

मेरे स्क्रिप्ट, फ़ाइल अगर तय करने के माध्यम से जाना होगा के लिए उदाहरण के लिए, फाइलें/कार्य/परीक्षण/जो 'ए' से शुरू होती हैं जिन्हें पिछले 1 दिनों में संशोधित नहीं किया गया है, और यदि ऐसा है, तो यह उन्हें हटा देगा।

इसके लिए, मैं खोज कमांड का उपयोग करता हूं। उदाहरण:

my $command = "find " . $values[0] . $values[1] . " -mtime +" . $values[3] . " -delete ;\n"; 
system ($command); 

लेकिन, मुझे प्रत्येक चरण के लिए रिटर्न कोड पुनर्प्राप्त करने के लिए कहा गया है ताकि यह सुनिश्चित किया जा सके कि प्रत्येक चरण ठीक काम करता है।

अब, मुझे पता है कि सिस्टम() रिटर्न कोड देता है, और बैकटीक्स आउटपुट लौटाता है। लेकिन, मैं दोनों कैसे प्राप्त कर सकता हूं?

+0

मैं [फ़ाइल :: ढूंढें] (http://perldoc.perl.org/File/Find.html) का उपयोग करूंगा, [फ़ाइल :: खोजक] (https://metacpan.org/pod/File :: खोजक), [फ़ाइल :: खोजें :: नियम] (https://metacpan.org/pod/File::Find::Rule), या 'ढूंढ' के बजाय समान। इससे आप पूरे 'find' कमांड की सफलता के बजाय प्रत्येक व्यक्ति' अनलिंक 'की सफलता की जांच कर सकेंगे। – ThisSuitIsBlackNot

उत्तर

8

बैकटीक्स चलाने के बाद, वापसी कोड $? में उपलब्ध है।

$?

स्थिति पिछले पाइप पास से लौट आए, बैकटिक (``) आदेश, सफल कॉल प्रतीक्षा करने के लिए() या waitpid(), या सिस्टम से() ऑपरेटर। पारंपरिक यूनिक्स प्रतीक्षा() सिस्टम कॉल द्वारा लौटाया गया यह 16-बिट स्टेटस शब्द है (या फिर इसे देखने के लिए बनाया गया है)।

$output = `$some_command`; 
print "Output of $some_command was '$output'.\n"; 
print "Exit code of $some_command was $?\n"; 
+1

युक्ति: सभी 'सिस्टम',' रीडपाइप '(बैकटिक्स),' प्रतीक्षा 'और' वेटपिड 'सेट '$?'। – ikegami

+0

यह भी ध्यान दें - यह आवश्यक रूप से कमांड का रिटर्न कोड नहीं होगा - आपको इसे थोड़ा सा स्थानांतरित करने की आवश्यकता हो सकती है। – Sobrique

+0

'सिस्टम' के लिए प्रलेखन से पता चलता है कि' $? 'से अलग-अलग मानों को कैसे अतिरिक्त किया जाए। – ikegami

2

बैकटिक के लिए सार्वभौमिक समाधान, प्रणाली(), आदि ${^CHILD_ERROR_NATIVE} चर का उपयोग करने के लिए है। http://perldoc.perl.org/perlvar.html#%24%7b%5eCHILD_ERROR_NATIVE%7d

$ {^ CHILD_ERROR_NATIVE} देशी स्थिति पिछले पाइप पास से लौट आए, बैकटिक (``) आदेश, सफल कॉल प्रतीक्षा करने के लिए() या waitpid(), या से: perlvar perldoc देखें सिस्टम() ऑपरेटर। POSIX- जैसे सिस्टम पर इस मान को POSIX मॉड्यूल द्वारा प्रदान किए गए WIFEXITED, WEXITSTATUS, WIFSIGNALED, WTERMSIG, WIFSTOPPED, WSTOPSIG और WIFCONTINUED फ़ंक्शंस के साथ डीकोड किया जा सकता है।

+0

[पर्ल 5.8.9 में प्रस्तुत] (https://metacpan.org/pod/perl589delta#New-internal-variables) – mob