Rubyのようなシェルコマンドを実行する方法を知っています。
%x[#{cmd}]
しかし、このコマンドを実行するディレクトリを指定するにはどうすればよいですか?
Pythonのsubprocess.Popen
に似たシェルアウトの同様の方法があります:
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}]
Dirが安全に変更されているbacktricksに最も近いのは_capture2
_です。
_require 'open3'
output, status = Open3.capture2('pwd', :chdir=>"/tmp")
_
他の便利なOpen3メソッドは、Ruby docs。で確認できます。1つの欠点は、jruby
の_open3
_のサポートがかなり壊れていることです。
私はこの同じ問題を抱えていたので、両方のコマンドをバックティックに入れ、「&&」で区切って解決しました。
`cd \desired\directory && command`
最善の解決策ではないかもしれませんが、Dir.pwdを使用して現在のディレクトリを取得し、どこかに保存してみてください。その後、Dir.chdir(destination)を使用します。destinationは、コマンドを実行するディレクトリです。コマンドを実行した後、Dir.chdirを再度使用し、以前に保存したディレクトリを使用して復元します。