Ruby在特定目录中运行shell命令

icn*_*icn 54 ruby shell command

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

%x[#{cmd}]
Run Code Online (Sandbox Code Playgroud)

但是,如何指定运行此命令的目录?

是否有类似于shell的方式,类似于subprocess.PopenPython:

subprocess.Popen(r'c:\mytool\tool.exe', cwd=r'd:\test\local')
Run Code Online (Sandbox Code Playgroud)

谢谢!

knu*_*nut 127

你可以使用块版本Dir.chdir.在块中,您位于请求的目录中,在阻止之后,您仍然在上一个目录中:

Dir.chdir('mydir'){
  %x[#{cmd}]
}
Run Code Online (Sandbox Code Playgroud)

  • Ruby用块做的事情永远不会让我感到惊讶.Ruby经常使我的其他语言变得笨拙和过于复杂. (7认同)
  • 如果你有一个单独的线程,Dir.chdir就可以了.对于多个线程,请在此处查看其他答案. (5认同)
  • +1似乎很少有Ruby程序员知道这一点. (4认同)

Abe*_*ker 12

Ruby 1.9.3(阻塞调用):

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

Dir.pwd #=> "/home/abe"
Run Code Online (Sandbox Code Playgroud)