Ruby で次のようなシェル コマンドを実行する方法を知っています。
%x[#{cmd}]
しかし、このコマンドを実行するディレクトリを指定するにはどうすればよいでしょうか?
subprocess.Popen
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}]
安全な変更ディレクトリを使用したバックトリックに最も近いのは次のcapture2
とおりです。
require 'open3'
output, status = Open3.capture2('pwd', :chdir=>"/tmp")
Ruby ドキュメントで、他の便利な Open3 メソッドを確認できます。1 つの欠点は、jruby
サポートopen3
がかなり壊れていることです。
最善の解決策ではないかもしれませんが、Dir.pwd を使用して現在のディレクトリを取得し、どこかに保存してみてください。その後、Dir.chdir( destination ) を使用します。destination は、コマンドを実行するディレクトリです。コマンドを実行した後、Dir.chdir を再度使用し、以前に保存したディレクトリを使用して復元します。