2012-04-30 16 views
3

私は非常に基本的な質問があります。私は、Linuxのディレクトリの内容にアクセスするRubyスクリプトを実行しています。ルビスクリプトが実行されると、ディレクトリはコマンドラインに渡されます。Rubyスクリプトでシェルスクリプトコマンドを実行する

私の質問は、どのようにコマンドライン引数をrubyコマンドに使用するのですか?

usrDirectory = ARGV[0] 
lsCmd = `ls -l` 

は私がusrDirectory -l lsのようなものを使用する必要があります:

私はそのようなように設定されています。 私はちょうどのようなコマンドに挿入できますか?

答えて

2

上記の権利である、とあなたが標準出力にls出力を持つようにしたい場合は、これはそれを少しきれいになります:

system("ls", "-l", dir) 

これは、上記のように出力を変数に入れるのではなく、標準出力に出力するようにします。

+3

'system'を使うつもりなら、複数引数のバージョンを使うべきです:' system( 'ls'、 '-l'、dir) ' –

+0

ああそうです。私はそれを変更します。私に思い出させてくれてありがとう。 – Linuxios

0

あなたは、式の展開を使用すると、コマンド文字列にエスケープシーケンスをすることができます

lsCmd = `ls -l #{usrDirectory}` 
0

2つのオプションがあります。あなたは行うことができます。

lsCmd = `ls -l #{usrDirectory}` 

または

command = "ls -l " + usrDirectory 
lsCmd = %x[ #{command} ] 
1

あなたは、たとえば、シェルを使用しなくても、あなたが望む結果を得ることができる必要があります:

どんなにあなたが何をすべきか
usr_dir = "/tmp" 
files = Dir["#{usr_dir}/*"] 

p files 

、あること非常に注意してくださいユーザーが入力したテキストを解析して実行されるものの一部としてシェルに渡すとき。ユーザーが入力した場合たとえば、何が

(代わりにディレクトリ名の)起こる; RM -rf/*

+1

そのため、これらのコマンドの複数引数バージョンを使用する理由は、シェルをバイパスして引数をプログラムの引数として直接使用するためです。 – Linuxios

+0

はい、ポイントは、シェルがそれを解析させないことです。あまりにも多くのパワー。 – theglauber

+0

正確に。私は確信しています。 – Linuxios

関連する問題