2011-09-23 8 views
6

में खोल कमांड से नई लाइन से छुटकारा पाएं मैं अपनी लिपि में सरल खोल कमांड चलाने की कोशिश कर रहा हूं, लेकिन चंप या काट का उपयोग करके भी नई लाइनों से छुटकारा पाने में असमर्थ हूं।रूबी

क्या मुझे कुछ याद आ रही है?

 u=`echo '#{l}' | cut -d: -f4`.chop() 
     p2=`echo '#{l}' | cut -d: -f3`.chop() 
     p1=`echo '#{l}' | cut -d: -f2`.chop() 
     h=`echo '#{l}' | cut -d: -f1`.chop() 


#  **Cant get newlines to go after p1 and p2 !! ??** 
     path="#{p1}/server/#{p2}abc" 
     puts path 


Output: 
/usr (p1) 
/server 
/bin (p2) abc 
Expected Output: 
/usr/server/binabc 

कोई सुझाव?

कुछ सुझाव के अनुसार, करने के लिए अपने कोड बदल दिया है:

h, p1, p2, u = l.split /:/ 
u.strip 
u.chomp 

puts u.inspect 

आउटपुट: "string\n"

असल में मैंने पहले chomp का उपयोग करने और एक ही समस्या से टकराने गया था की कोशिश की थी। क्या मुझे चंप को अलग तरीके से कॉल करने या किसी मणि को जोड़ने की ज़रूरत है?

+0

वास्तव में क्या समस्या है? कितने उत्पादन की अपेक्षा है? – Geo

उत्तर

7

सभी रैपिंग व्हाइटस्पेस को हटाने के लिए String#strip या String#chomp ('एम' पर ध्यान दें) केवल एक पिछली नईलाइन को हटाने के लिए उपयोग करें।

String#chop अंतिम वर्ण (या \r\n जोड़ी) को हटा देता है जो कि खतरनाक हो सकता है यदि आदेश हमेशा एक नई लाइन के साथ समाप्त नहीं होता है।

मुझे लगता है कि आपका कोड काम नहीं करता है क्योंकि परिणामों के आउटपुट के अंत में कई न्यूलाइन \ whitespace था। (और यदि ऐसा है, तो strip आपके लिए काम करेगा।) आप इसे सत्यापित कर सकते हैं, हालांकि, chop पर कॉल को हटाकर और फिर p u या puts u.inspect का उपयोग करके यह देखने के लिए कि वास्तव में आउटपुट में कौन से वर्ण हैं।

और आपकी जानकारी के लिए, रुबी में मूर्खतापूर्ण होने के लिए मूर्खतापूर्ण है जो विधियों को कॉल करते समय कॉल करता है, उदा। u = foo.chop

+0

Thanx @phrogz। मैंने u.inspect के आउटपुट को पोस्ट किया। मैं अभी भी एक ही मुद्दा मार रहा हूं, क्या मैं इसे सही तरीके से नहीं बुला रहा हूं? – codeObserver

+0

@code.bserver 'u.chomp' का उपयोग करके कुछ भी नहीं होगा, क्योंकि यह विधि का गैर-उत्परिवर्तनीय संस्करण है। आपको या तो 'u.chomp!' या 'u = u.chomp' करना होगा। '। स्ट्रिप 'बनाम' स्ट्रिप! 'के लिए भी यही है। – Phrogz

+0

thnx। यह तय है। – codeObserver

3

str.chomp wll तारों से न्यूलाइन चरित्र को हटा देगा। str.chop केवल अंतिम चरित्र को हटा देता है।

2

तुम क्यों इतना आसान कुछ के लिए खोल करने के लिए बाहर बुला रहे हैं:

h, p1, p2, u = l.split /:/ 
+0

thnx glenn। असल में मैं अभी भी रूबी सीख रहा हूं और रूबी को कुछ खोल स्क्रिप्ट बंद करने की कोशिश कर रहा हूं। तो एक पहली पुनरावृत्ति के रूप में केवल एक रूबी संरचना में शेल कमांड चलाने की कोशिश कर रहा है और फिर मैं अनिवार्य – codeObserver

+0

को बाहर निकालने के लिए पास लेगा, फिर 'chomp' जो आप चाहते हैं। –