J'ai essayé d'exécuter un script shell à partir du code Java, mais je suis confronté à un problème. Le script est dans le fichier batchstart.sh -impossible d'exécuter le script ksh à partir de Java: java.io.IOException:.: Non trouvé
#!/bin/ksh
export DISPLAY=:0.0
Maintenant, le script est exécuté avec un point sur la ligne de commande -. batchstart.sh
Comment l'exécuter à partir de Java? Mon code java est ci-dessous. Il jette l'exception suivante -
java.io.IOException: .: not found at java.lang.UNIXProcess.forkAndExec(Native Method) at java.lang.UNIXProcess.<init>(UNIXProcess.java:102) at java.lang.ProcessImpl.start(ProcessImpl.java:65) at java.lang.ProcessBuilder.start(ProcessBuilder.java:451) at java.lang.Runtime.exec(Runtime.java:591) at java.lang.Runtime.exec(Runtime.java:429) at SetDisplay.main(SetDisplay.java:12)
import java.io.*;
public class SetDisplay {
public static void main(String[] args) {
File wd = new File("/myhomedir/");
System.out.println("Working Directory: " +wd);
Process proc = null;
try {
proc = Runtime.getRuntime().exec(". batchstart.sh", null, wd);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Comment puis-je faire fonctionner le script shell?
J'ai également essayé le code suivant, mais cela ne fonctionne pas non plus.
File wd = new File("/bin");
System.out.println(wd);
Process proc = null;
try {
proc = Runtime.getRuntime().exec("/bin/bash", null, wd);
}
catch (IOException e) {
e.printStackTrace();
}
if (proc != null) {
BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(proc.getOutputStream())), true);
out.println("cd /home/");
out.println(". batchstart.sh");
out.println("exit");
try {
String line;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
proc.waitFor();
in.close();
out.close();
proc.destroy();
}
catch (Exception e) {
e.printStackTrace();
}
}
Mon programme Java a juste besoin d'être réglé sur DISPLAY. Donc, n'y a-t-il aucun moyen que je puisse exécuter le script depuis Java? – Vicky
Donc vous voulez dire qu'il n'y a aucun moyen de faire fonctionner "export DISPLAY =: 0.0" à partir de Java? – Vicky
Non, voir mise à jour. Votre problème de base est que tout ce que vous exécutez depuis Java n'affecte PAS l'environnement Javas. Et, en plus de cela, je ne crois pas que Java fournisse un setenv(). – paxdiablo