54 votes

commande ruby run shell dans un répertoire spécifique

Je sais comment exécuter une commande shell en ruby comme

    %x[#{cmd} ]
 

Mais comment spécifier un répertoire pour exécuter cette cmd en ruby?

Y a-t-il un semblable faisant ceci comme python

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

Merci

128voto

knut Points 10107

Vous pouvez utiliser la version bloc de Dir.chdir . À l'intérieur du bloc, vous vous trouvez dans le répertoire demandé, après le bloc, vous vous trouvez encore dans le répertoire précédent:

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

12voto

Abe Voelker Points 7306

Ruby 1.9.3 (appel bloquant):

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

Dir.pwd #=> "/home/abe"
 

4voto

glenn jackman Points 69748

aussi, en prenant la route des coquillages

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

1voto

parallelgeek Points 263

Peut-être que ce n'est pas la meilleure solution, mais essayez d'utiliser Dir.pwd pour obtenir le répertoire actuel et le sauvegarder quelque part. Après cela, utilisez Dir.chdir (destination), où destination est un répertoire dans lequel vous voulez exécuter votre commande. Après avoir exécuté la commande, utilisez à nouveau Dir.chdir, en utilisant le répertoire précédemment enregistré pour le restaurer.

1voto

rmsimpsonau Points 8

J'ai eu le même problème et je l'ai résolu en mettant les deux commandes entre les ticks arrière et en les séparant avec '&&':

 `cd \desired\directory && command`
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X