Ich schreibe ein Java-Programm MyAwesomeProgram, das die exec-Funktion von Process verwendet, um bash-Befehle lokal auszuführen. Mein Code befindet sich in/home/a/b/c, und es befinden sich .sh-Dateien in/home/a/b/d, die ich ausführen muss. Allerdings, wenn ich meinen Code ausführen:.sh-Dateien mit Javas exec in einem anderen Verzeichnis ausführen?
Process p;
Runtime rt = new Runtime.getRuntime();
p = rt.exec("./home/a/b/d/shell.sh");
p.waitFor();
Ich erhalte eine Fehlermeldung:
Exception in thread "main" java.io.IOException: Cannot run program "./home/a/b/d/shell.sh": java.io.IOException: error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:460)
at java.lang.Runtime.exec(Runtime.java:593)
at java.lang.Runtime.exec(Runtime.java:431)
at java.lang.Runtime.exec(Runtime.java:328)
at MyAwesomeProgram.main(MyAwesomeProgram.java:186)
Caused by: java.io.IOException: java.io.IOException: error=2, No such file or directory
at java.lang.UNIXProcess.<init>(UNIXProcess.java:148)
at java.lang.ProcessImpl.start(ProcessImpl.java:65)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:453)
Ich glaube, dies ist nur ein Fehler mit dem Befehl exec String in der Formatierung, aber ich habe nicht in der Lage gewesen zu finden eine Lösung bisher. Wo habe ich versagt? Alle anderen Tipps/Tricks zur effektiven Verwendung von exec wären wünschenswert, aber völlig optional. Vielen Dank!
Edit: Ich habe den Code funktioniert, es war ein Problem mit ein paar Verzeichnis-Referenzen Ich habe rückwärts sowie was Woot4Moo sagte.
hast du ohne das versucht? Wenn Ihr Code von/home/a/b/c läuft, dann schreiben Sie bitte /home/a/b/c/home/a/b/d/shell.sh – Dan
, wie Sie dies über die Befehlszeile ausführen. Einschließlich Ihres aktuellen Verzeichnisses (d. H./Home/chris) – Woot4Moo
javac MyAwesomeProgram.java, java MyAwesomeProgram. Die Hauptmethode enthält den Code (dies ist ein Dummy-Programm, um die Exec-Funktionalität zu testen, bevor ich sie in eine größere, bereits getestete Gruppe von Programmen einfüge). Alles Notwendige ist bereits importiert und getestet, um wie erwartet zu funktionieren. – Chris