0

popen4を使用するカスタムランチャーアプリがあります。スクリプトは、最後の「-」のダブルハイフンの後のすべてをpopen4に渡し、std out機能を使用して、カスタムパイピングと統計収集を行います。

この問題は、起動するスクリプトがスペースを含む引数を取るときに発生します。

my_launcher.rb --keep-alive --log-file /path/file.log -- /launch/this/script.rb --foo "param with spaces"

シェルは「spacewithspaces」の周りの引用符を取り除きます。また、popen4は文字列のみを受け入れるため、バグが発生するのではないかと心配している正規表現の作業を行わずに、これらを追加し直す方法はありません。

'regular' popenは、コマンドを配列として渡し、シェルをバイパスする方法を提供しますが、これはpopen4に実装されていないようです。


ルビーIOのrdocから

http://www.ruby-doc.org/core-1.9.3/IO.html

cmdが文字列「-」の場合、Rubyの新しいインスタンスがサブプロセスとして開始されます。

cmdが文字列の配列である場合、シェルをバイパスするサブプロセスのargvとして使用されます。


popenが使用する「シェルバイパス」機能にアクセスして、そのオブジェクトをpopen4に渡す方法はありますか?

または、文字列の配列を取得し、必要に応じて引用符で囲んでフォーマットし、スペースを含むパラメータが1つの引数として認識されるようにする方法はありますか?次に、この文字列をpopen4に渡すことができます。

ありがとう!

4

1 に答える 1

0

shellwordsモジュールを使用してこれを解決しました

 require 'shellwords'
 args = [ '/launch/this/script.rb', '--foo', 'param with spaces' ]
 popen4( Shellwords.join( args ) )
于 2013-02-12T20:50:35.590 に答える