2012-04-03 10 views
8

W Ruby, wiem, że mogę wykonać polecenie powłoki z backticks tak:Ruby Backticks - łamanie polecenia na wiele linii?

`ls -l | grep drw-` 

jednak pracuję nad scenariuszem, który wzywa do kilku dość długich poleceń powłoki, a przez wzgląd na czytelność za I Chciałbym móc ją podzielić na wiele linii. Zakładam, że nie mogę po prostu wrzucić znaku plusa, jak w Strings, ale jestem ciekawy, czy istnieje technika łączenia poleceń w jakiś inny sposób, aby czyścić długi ciąg poleceń w wiele linii kodu źródłowego.

+1

Osobiście, jeśli trzeba zadzwonić kilka długich poleceń powłoki, bym umieścić je w skrypcie powłoki, a następnie zadzwonić i uchwycić jego wydajność. Wolę utrzymywać skrypty powłoki oddzielnie od mojego kodu Ruby. –

Odpowiedz

10

Można użyć interpolacji:

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

lub umieścić komendy do zmiennej i interpolacji zmienną:

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

W zależności od potrzeb, można również być w stanie wykorzystać different method of running the shell command, na przykład system, ale zauważmy, że jego zachowanie nie jest dokładnie takie samo, jak zwrotne.

+0

Dzięki, doszedłem do wniosku, że będzie to coś prostego, ale miałem problem z utworzeniem zapytania google, aby uzyskać coś znaczącego z powrotem. – asfallows

33

można uniknąć powrotu karetki z \:

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

Działa! To jest najbardziej poprawna odpowiedź. – FloatingRock

+1

Tego właśnie szukam. –

1

Można również zrobić to z wyraźną \n:

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

..., a następnie umieścić w połączeniu ciąg wewnątrz backticks.

`#{cmd_str}` 
7

Zastosowanie %x:

%x(ls -l | 
    grep drw-) 

Inna:

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

Zauważ, że ważne jest, aby mieć rury ('|') na końcu pierwszej linii, a nie na początku drugiego. – codener