如何替换当前过程而无需外壳扩展,传递完整的ARGV数组



bash

的简单等同是什么
exec $0 $*

在Ruby?

http://www.ruby-doc.org/core-1.9.3/kernel.html#method-i-exec

编辑

答案的一部分似乎是:

  exec( "/bin/ls", *ARGV)  # credits: http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/13379

因此,接下来,变量$0是否会保留当前脚本的完整名称和路径,或者Ruby二进制?在 IRB 下,仅" IRB"返回,这意味着我至少需要找到并预先准备路径。

条纹上的另一个解决方案来自https://stackoverflow.com/a/2966988/1069375

cmd_line = "#{$0} #{ARGV.join( ' ' )}" 

但是,如果可以将命令与其参数分开,则尝试exec cmd_line似乎会受到外壳扩展的约束。ARGV.join本身将所有参数都当作一个。

这应该在不调用子壳的情况下执行当前文件:

exec([ File.absolute_path(__FILE__), __FILE__ ], *ARGV)

编辑:当然,如果您要更改脚本中的当前工作目录,它会断开。但是,这很容易解决。

相关内容

  • 没有找到相关文章

最新更新