2012-04-03 35 views
8

Trong Ruby, tôi biết tôi có thể thực hiện một lệnh shell với backticks như vậy:Backticks của Ruby - lệnh ngắt thành nhiều dòng?

`ls -l | grep drw-` 

Tuy nhiên, tôi đang làm việc trên một kịch bản trong đó kêu gọi cho một vài lệnh shell khá dài, và vì lợi ích của khả năng đọc của tôi d muốn có thể chia nhỏ ra nhiều dòng. Tôi giả sử rằng tôi không thể ném vào một dấu cộng như với Strings, nhưng tôi tò mò nếu có một kỹ thuật nối lệnh của một số cách khác để xóa sạch chuỗi lệnh dài thành nhiều dòng mã nguồn.

+1

Cá nhân, nếu tôi cần phải gọi một số lệnh shell lâu, tôi muốn đặt chúng vào một kịch bản shell, và sau đó gọi và bắt đầu của nó. Tôi muốn duy trì các kịch bản shell riêng biệt với mã Ruby của mình. –

Trả lời

10

Bạn có thể sử dụng nội suy:

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

hoặc đặt lệnh vào một biến và suy biến:

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

Tùy thuộc vào nhu cầu của bạn, bạn cũng có thể sử dụng một different method of running the shell command, chẳng hạn như system, nhưng lưu ý hành vi của nó không chính xác giống như backticks.

+0

Cảm ơn, tôi đã tìm thấy nó sẽ là một cái gì đó đơn giản nhưng tôi đã gặp khó khăn khi tạo truy vấn google của tôi để có được một cái gì đó có ý nghĩa trở lại. – asfallows

33

Bạn có thể thoát khỏi kí tự xuống dòng một \:

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

Hoạt động! Đây là câu trả lời đúng nhất. – FloatingRock

+1

Đó là những gì tôi đang tìm kiếm. –

1

Bạn cũng có thể làm điều này với rõ ràng \n:

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

... và sau đó đưa chuỗi kết hợp bên trong backticks.

`#{cmd_str}` 
7

Sử dụng %x:

%x(ls -l | 
    grep drw-) 

Một:

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

Lưu ý rằng điều quan trọng là phải có đường ống ('|') ở cuối dòng đầu tiên, không phải ở đầu dòng thứ hai. – codener

Các vấn đề liên quan