2008-09-03 12 views
1

ruby​​スクリプトからOSコマンドを実行したいが、ruby変数から引数を追加したい。逆引用符を使用してコマンドラインに引数を連結することは可能ですか?

私はそのようなキーワードシステム使用することにより可能です知っている:

#!/usr/bin/env ruby 
directory = '/home/paulgreg/' 
system 'ls ' + directory 

のが、「バッククォートやバッククォート構文」を使用することで可能ということでしょうか? (つまり、その構文を使用しています:ls

答えて

6

いいえ、それはlsの出力とdirectoryの内容を連結するだけです。

しかし、あなたはこれを行うことができます:あなたがそれらにスペースを持つパス名の問題に実行するつもりので

#!/usr/bin/env ruby 
directory = '/home/paulgreg/' 
`ls #{directory}` 
6
`ls #{directory}` 

は非常に安全ではありません。

それはこのような何かをするほうが安全です:

directory = '/home/paulgreg/' 

args = [] 
args << "/bin/ls" 
args << directory 

system(*args) 
+0

システム・コールからの出力を読んでいましたか? –

1

ニックは正しいですが、引数の区分を組み立てる必要はありません。

directory = '/Volumes/Omg a space/' 
system('/bin/ls', directory) 
関連する問題