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支持相当破碎。