2016-06-01 14 views
-1

これはおそらく簡単な質問ですが、私は解決策を見出すのが非常に困難です。私はcmdのウィンドウで作業しています。私は単にこのコマンドを使用しようとしています:Rubyからcmdでコマンドを実行

find /i \"chef_server_url\" C:/chef/client.rb 

私はコマンドが動作することを知っています。私がチェックしたいファイルにURLを返します。

これをコードで実行し、結果を自分のコードに戻したいとします。しかし、特にエスケープ文字で文字列を書式設定するのが苦労しています

私は%x[]を使用しています。だから、理想的に私はちょうど
%x[find /i \"chef_server_url\" C:/chef/client.rb]

を言うでしょう。しかし、それは/ cおよび/ cは

+1

なぜ、Rubyを砲撃するのではなく、単に使用しないのですか? –

+0

@DaveNewton私はルビーを使うつもりです。正直なところ私はルビーの新しさです。ちょうど私がやっていることを知っているものを使用しようとしていました... – joemost45

+0

私はただRubyを使用しますか? – joemost45

答えて

0

あなたが内側からシェフServerのURLにアクセスしようとしているそのようにすることになっていないと考えているのでc:/chef/client.rbは正しくフォーマットしません。シェフ? Chef::Config[:chef_server_url]を使うことができますが、もっと深い疑問はあなたがやろうとしていることですか?

+0

まあ、あなたはちょうど私の質問hahaを解決した.. thats正確に何をしようとしていた..ありがとう! – joemost45

0

あなたの質問への短い答えは、Rubyでシステムコマンドを実行するための複数の方法があるということです。

  • Kernel#system方法はとても限り、あなたは正確にあなたのコマンドを得ることができるよう、プレーンな文字列を受け取り文字列で表現されていればうまくいくはずです。 system 'find /i "chef_server_url" C:/chef/client.rb'のようなものが動作するはずです。
  • Backticksは同様のことをします。find /i "chef_server_url" c:/chef/client.rb( `backticks`で囲み、StackExchangeでどのようにフォーマットするのか分かりません)。

私は最初にコマンドの文字列表現を取得することをお勧めします。putsを貼り付けてコマンドウィンドウに貼り付けてください。動作する場合は、systemまで送信してください。

しかし、ここの他の人たちと同じように、あなたが解決しようとしている根本的な問題に対して、より良い解決策があると私は思っています。

私はテストのためにWindowsコンピュータの近くにいないので、これらを試してみる必要があります。

+0

ルビーには間違いありませんが、コマンド実行に別の宝石を使用するシェフにとっては間違いです。 – coderanger

関連する問題