Exécution d’une commande de source UNIX en Java

Ceci est ma première question sur stackoverflow, alors je vais essayer de le garder concis et pertinent.

Je suis en train de créer un programme Java qui tente d’appeler un programme externe situé sur le système. Pour ce faire, je dois appeler un script shell qui établit des liens vers les bibliothèques appropriées pour garantir que le système est lié. à ceux-ci avant que le programme externe puisse être exécuté.

Le problème qui se pose est que je ne peux pas appeler le script shell via Java, j’ai fait des recherches haut et bas et je suis conscient de la possibilité d’utiliser des méthodes telles que la classe ProcessBuilder. Malheureusement, je suis assez nouveau dans le monde pour essayer d’invoquer des instructions en ligne de commande via Java et je suis donc bloqué pour obtenir des réponses.

Un exemple du code que j’utilise peut être trouvé ci-dessous:

private void parsing_JButtonActionPerformed(java.awt.event.ActionEvent evt) { // Get project path for copying of Fortran program to folder and execution Ssortingng projectPath = Newproject_GUI.getProjectPath(); Ssortingng sourcePath [] = {"/bin/sh ", "-c ","source ~/set_env_WRF_gnu.sh"} ; Runtime fortranAnalyser = Runtime.getRuntime(); try { Process p = fortranAnalyser.exec("cp main.exe " + projectPath); Process k = fortranAnalyser.exec(sourcePath); BufferedReader is = new BufferedReader(new InputStreamReader(k.getInputStream())); Ssortingng line; while ((line = is.readLine()) != null) { System.out.println(line); } } catch (IOException ex) { Logger.getLogger(Analyser_GUI.class.getName()).log(Level.SEVERE, null, ex); } } 

Le processus p fonctionne correctement et copie bel et bien main.exe dans le répertoire prévu lorsque la méthode est appelée. Processus k ne le fait pas et c’est là que le problème est.

Merci d’avance.

Le problème est que “source” est la commande interne de BASH (vous utilisez “sh” mais c’est simplement BASH en mode simplifié). Donc ce que vous faites est:

  • vous engendrez un nouveau processus “sh” et trouvez quelque chose là-bas (en définissant des VARIABLES, je suppose)
  • le processus se termine et toutes les variables sont perdues
  • vous engendrez un autre processus, mais les VARIABLES sont déjà parties

Je ne suis pas sûr que vous utilisiez ces variables plus tard, mais selon le nom du script, il est probablement en train d’en définir. Ne fais pas ça comme ça.

Au fait, si vous voulez seulement exécuter un script dans bash, vous n’avez pas besoin de le générer. Pour obtenir ses effets secondaires, exécutez-le simplement avec:

 Ssortingng sourcePath [] = {"/bin/sh ", "/home/XYZ/set_env_WRF_gnu.sh"} ; 

S’il vous plaît noter que vous ne pouvez pas utiliser ~ dans ce cas, utilisez Java pour obtenir votre répertoire personnel.