2012-04-03 11 views
8

は、私はそうのようなバッククォートでシェルコマンドを実行することができます知っている:Ruby Backticks - コマンドを複数の行に分割しますか? Rubyでは

`ls -l | grep drw-` 

は、しかし、私はいくつかのかなり長いシェルコマンドのために呼び出すスクリプトに取り組んでいる、と読みやすさのために、私は」それを複数の行に分けることができるのが好きです。私はStringsのようにプラス記号を投げることはできないと仮定していますが、長いコマンド文字列を複数の行のソースコードに完全に分割するコマンド連結技術があるかどうか不思議です。

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

または変数にコマンドを入れて、変数を補間::あなたは、補間を使用することができます

+1

私はいくつかの長いシェルコマンドを呼び出す必要がある場合、私はシェルスクリプトに入れ、その後、呼びたいですその出力をキャプチャします。むしろ私のRubyコードとは別にシェルスクリプトを管理したいと思っています。 –

答えて

10

あなたのニーズに応じて

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

を、あなたはまた、different method of running the shell commandを使用することができるかもしれsystemのようなものですが、その動作はバッククックとまったく同じではありません。あなたはまた、明示的に\nでこれを行うことができます

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

ありがとう、私はそれが何か簡単だろうと思ったが、私は何か意味のあるものを得るために私のGoogleクエリを形成するのに困っていた。 – asfallows

33

あなたは\とキャリッジリターンを逃れることができます。

`#{cmd_str}` 
+5

作品!これが最も正しい答えです。 – FloatingRock

+1

それは私が探しているものです。 –

1

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

を...そしてバッククォートの内側を組み合わせた文字列を入れて

7

使用%x

%x(ls -l | 
    grep drw-) 

別:個人的に

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

パイプ( '|')を最初の行の末尾に置くことは重要であり、2番目の行の先頭にはパイプがないことに注意してください。 – codener

関連する問題