2011-12-01 2 views
-1

J'essaie d'exécuter un programme java à partir de mon code ruby.ruby ​​backtick, kernel.system, exec, la commande ne réussit pas

Mon code est quelque chose comme:

cmd = "java -cp \"path/lib/*\" com.blah.blah" 


# %x[#{cmd}] 
# `#{cmd}` 
# Kernel.system(cmd) 
    Kernel.exec(cmd) 

Mon problème, est la commande ne fonctionne pas avec succès dans les deux sens. Je sais que% x, les backticks s'exécutent dans un sous-shell, donc probablement certaines variables d'env sont manquantes. Cependant j'espérais que Kernel.system, Kernel.exec réussirait.

La commande fonctionne bien si je le tape directement dans un shell. Toute aide pour le débogage?

Merci!

+0

Ajoutez une redirection de toutes les sorties (stdout et stderr) de la commande à un fichier dans 'cmd' et publiez-la ici. – philant

Répondre

0

Il s'avère que je ne fermais pas les fichiers que je créais.

Apparemment, c'était bien quand je l'invoquais directement depuis le shell ou directement depuis .sh, parce que le script ruby ​​était déjà sorti. Cependant, lorsque je l'invoquerais à partir du script Ruby, je ne pourrais pas accéder au fichier et créer des problèmes.

Bottom line: Fermez vos fichiers autrement perdre une demi-journée de travail!

Questions connexes