Comment java exécute-t-il les commandes du terminal?

Trouvé cela difficile; Avoir le code suivant:

Ssortingng cmd = "find /home/folder/ -type f"; Runtime run = Runtime.getRuntime() ; Process pr = run.exec(cmd); pr.waitFor(); 

Je vais pr.getInputStream() et avoir le résultat de find correct, pas de problème. Cependant, si je veux être un peu plus précis et avoir ma commande sous le nom cmd = "find /home/folder/ -type f -name somefile*"; , le stream d’entrée sera vide.

Maintenant, je pensais que ce serait lié aux extensions de chaînes effectuées par le shell interactif (qui ne seraient pas utilisées dans ce cas, je suppose). Dans ce cas, le * n’aurait aucun sens, et find chercherait des fichiers vraiment nommés “*” (quelque chose comme \* ). J’ai donc essayé d’avoir ma commande comme sh -c "find /home/folder/ -type f -name somefile*" . Mais ça n’a pas marché non plus …

Qu’est-ce que je rate?

Merci,

F.

Ps .: C’est un box AIX, avec la JVM Java d’IBM.

J’échappe toujours au joker lors de l’utilisation de find :

 cmd = "find /home/folder/ -type f -name somefile\\*"; 

Je pense que ce serait mieux si vous utilisez les méthodes ProcessBuilder ou peut-être Runtime.exec car elles ne nécessitent pas l’échappement du shell et ne passent pas par le shell.

  • ProcessBuilder , c’est des charges plus flexibles
  • Runtime.exec , diffère du formulaire qui ne prend qu’une chaîne