2011-09-08 5 views
5

यह है कि मैं क्या करने की कोशिश की है:मैं पर्ल में बैश कमांड के साथ स्ट्रिंग को कैसे प्रतिबिंबित करूं?

my $s = "s" x 1000; 
my $r = `echo $s |more`; 

लेकिन यह काम नहीं करता, मेरे कार्यक्रम सीधे बाहर निकल जाता है ...

उत्तर

6

यह आपके उदाहरण में काम नहीं करता है, क्योंकि आपने कभी भी $r प्रिंट नहीं किया है। आउटपुट वैरिएबल $r में कैप्चर किया गया है। इसके बजाय system() का उपयोग करके, आप STDOUT पर मुद्रित आउटपुट देख सकते हैं, लेकिन फिर आप आउटपुट का उपयोग नहीं कर सकते (जैसा कि) संभवतः।

बस कार्य करें:

print $r; 

अद्यतन: मैं print करने के लिए say बदल गया है, के बाद से "गूंज" पहले से ही आप एक नई पंक्ति देता है।

खोल मेटा वर्ण से बचने के लिए, के रूप में टिप्पणी में उल्लेख किया है, आप quotemeta.

उपयोग कर सकते हैं आप यह भी ध्यान रखें | more जब एक चर में शेल से उत्पादन पर कब्जा कोई प्रभाव नहीं है कि होना चाहिए। प्रक्रिया बस है: echo | more | $r, और आप more छोड़ सकते हैं।

+0

बाश से गुज़रने के दौरान स्ट्रिंग से कैसे बचें? – lexer

+0

आप [quotemeta] (http://perldoc.perl.org/functions/quotemeta.html) का उपयोग कर सकते हैं। या यदि आप जानते हैं कि क्या देखना है, तो आप खुद को पात्रों से बच सकते हैं। – TLP

3

system() कमांड के साथ प्रयास करें:

my $s = "s" x 1000; 
my $r = system("echo $s |more"); 

प्रदर्शित करेगा आपके सभी 'एस', और $r में आपके पास परिणाम के परिणाम (0 इस मामले में) होगा।

+1

क्या होगा यदि '$ s' में विशेष वर्ण हैं? क्या shell_escape समान सामान करने के लिए कोई फ़ंक्शन है? – lexer

+0

लेक्सर, http://stackoverflow.com/q/3212128#3212171 – daxim

+0

@ डेक्सिम, 'उद्धरण' से अलग क्या है? – lexer

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

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