2012-04-03 11 views
8

रूबी में, मैं जानता हूँ कि मैं बहुत तरह बैकटिक के साथ एक शेल कमांड निष्पादित कर सकते हैं:रूबी बैकिक्स - एकाधिक लाइनों में ब्रेक कमांड?

`ls -l | grep drw-` 

हालांकि, मैं एक स्क्रिप्ट जो कुछ काफी लंबी खोल आदेशों के लिए कहता है पर काम कर रहा हूँ, और पठनीयता की खातिर मैं डी इसे कई लाइनों पर तोड़ने में सक्षम होना पसंद है। मुझे लगता है कि मैं स्ट्रिंग्स के साथ एक प्लस साइन में फेंक नहीं सकता हूं, लेकिन अगर मैं स्रोत कोड की कई पंक्तियों में एक लंबे कमांड स्ट्रिंग को साफ़ करने के लिए किसी अन्य तरीके की कमांड कॉन्सटेनेशन तकनीक है तो मैं उत्सुक हूं।

+1

व्यक्तिगत रूप से, अगर मैं कुछ देर तक खोल आदेशों कॉल करने के लिए की जरूरत है, मैं उन्हें एक खोल स्क्रिप्ट में डाल दिया था, और फिर कॉल वह और इसके उत्पादन को पकड़ो। मैं अपने रूबी कोड से अलग शेल स्क्रिप्ट को बनाए रखना चाहता हूं। –

उत्तर

10

आप प्रक्षेप का उपयोग कर सकते हैं:

`#{"ls -l" + 
    "| grep drw-"}` 

या एक चर में आदेश दिया और चर अंतर्वेशन:

cmd = "ls -l" + 
     "| grep drw-" 
`#{cmd}` 
अपनी आवश्यकताओं पर निर्भर करता है

, आप भी एक different method of running the shell command उपयोग करने में सक्षम हो सकता है, जैसे कि system, लेकिन ध्यान दें कि इसका व्यवहार बैकटिक्स के समान नहीं है।

+0

धन्यवाद, मुझे लगा कि यह कुछ आसान होगा लेकिन मुझे कुछ सार्थक वापस पाने के लिए मेरी Google क्वेरी बनाने में परेशानी थी। – asfallows

33

आप एक \ साथ कैरिएज रिटर्न बच सकते हैं:

`ls -l \ 
| grep drw-` 
+5

काम करता है! यह सबसे सही जवाब है। – FloatingRock

+1

यही वह है जिसे मैं ढूंढ रहा हूं। –

1

तुम भी स्पष्ट \n के साथ ऐसा कर सकते हैं:

cmd_str = "ls -l\n" + 
      "| grep drw-" 

... और फिर बैकटिक अंदर संयुक्त स्ट्रिंग डाल दिया।

`#{cmd_str}` 
7

उपयोग %x:

%x(ls -l | 
    grep drw-) 

एक और:

%x(
    echo a 
    echo b 
    echo c 
) 
# => "a\nb\nc\n" 
+1

ध्यान दें कि पहली पंक्ति के अंत में पाइप ('|') होना महत्वपूर्ण है, दूसरे की शुरुआत में नहीं। – codener

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