Ruby在特定的目录下运行shell命令

我知道如何在Ruby中运行shell命令,如下所示:

%x[#{cmd}] 

但是,如何指定一个目录来运行这个命令呢?

是否有类似于subprocess的类似的炮击方式。Python中的打开方式:

 subprocess.Popen(r'c:\mytool\tool.exe', cwd=r'd:\test\local') 

谢谢!

您可以使用Dir.chdir的块版本。 在块内部,您在请求的目录中,在块之后,您仍然在以前的目录中:

 Dir.chdir('mydir'){ %x[#{cmd}] } 

Ruby 1.9.3(阻止调用):

 require 'open3' Open3.popen3("pwd", :chdir=>"/") {|i,o,e,t| p o.read.chomp #=> "/" } Dir.pwd #=> "/home/abe" 

还有,走贝壳路线

 %x[cd #{dir} && #{cmd}] 

也许这不是最好的解决scheme,但尝试使用Dir.pwd获取当前目录并将其保存在某处。 之后,使用Dir.chdir(destination),其中destination是您要从中运行命令的目录。 运行该命令后,再次使用Dir.chdir,使用先前保存的目录将其恢复。

我有这个相同的问题,解决了这个问题,把两个命令放回去,用'&&'分开。

 `cd \desired\directory && command` 

最近我看到backtricks安全更改目录是capture2

 require 'open3' output, status = Open3.capture2('pwd', :chdir=>"/tmp") 

您可以在ruby文档中看到其他有用的Open3方法。 一个缺点是对open3 jruby支持相当破碎。