我有一个使用 popen4 的自定义启动器应用程序。该脚本将末尾的双连字符“--”之后的所有内容传递到 popen4,我使用标准输出功能进行一些客户管道和统计数据收集。
当我们启动的脚本采用包含空格的参数时,就会出现问题。
my_launcher.rb --keep-alive --log-file /path/file.log -- /launch/this/script.rb --foo "param with spaces"
shell 去掉了“带空格的参数”周围的引号,因为 popen4 只接受字符串,所以如果不做一些我担心会引入错误的正则表达式工作,就无法重新添加这些引号。
'regular' popen 提供了一种将命令作为数组传递并因此绕过 shell 的方法,但这似乎在 popen4 中没有实现。
来自 ruby IO 的 rdoc
http://www.ruby-doc.org/core-1.9.3/IO.html
如果 cmd 是字符串“-”,则启动一个新的 Ruby 实例作为子进程。
如果 cmd 是一个字符串数组,那么它将被用作绕过 shell 的子进程的 argv。
有没有办法访问popen使用的“绕过外壳”功能并将该对象传递给popen4?
或者,有没有办法获取字符串数组,并在适当的情况下使用包含引号的格式对其进行格式化,以便将包含空格的参数识别为一个参数?然后我可以将此字符串传递给popen4。
谢谢!