Für ein Projekt zur Automatisierung einiger Mutationsadäquatheitstests versuche ich, GoLang aus der Quelle innerhalb eines Java-Programms zu machen. Ich konnte es von der Quelle in dem Terminal machen, und habe versucht, mit diesem Befehl in Java Runtime.getRuntime() exec() Befehl.
String[] envp = new String[3];
envp[0] = "CC=/usr/bin/clang";
envp[1] = "GOROOT_BOOTSTRAP=/usr/local/go";
envp[2] = "CGO_ENABLED=0";
Runtime.getRuntime().exec("./all.bash", envp, "$HOME/Desktop/go/src");
Der entsprechende Befehl an das funktioniert im Terminal in Ordnung. Ausführen von Code in Java (und Drucken der Ausgabe) wird der folgende:
./all.bash
##### Building Go bootstrap tool.
cmd/dist
go tool dist: FAILED: uname -r: exec: "uname": executable file not found in $PATH
Also das ist seltsam, dass es nicht uname finden. Wenn ich 'uname' auf dem Terminal eintrage, funktioniert es einwandfrei. So fand ich das Verzeichnis von uname ('die uname' gibt '/ usr/bin/uname') und Set $ PATH, dass für diesen Befehl:
String[] envp = new String[4];
envp[0] = "CC=/usr/bin/clang";
envp[1] = "GOROOT_BOOTSTRAP=/usr/local/go";
envp[2] = "CGO_ENABLED=0";
envp[3] = "PATH=/usr/bin";
Runtime.getRuntime().exec("./all.bash", envp, "$HOME/Desktop/go/src");
Und das bekommt stattdessen die Ausgabe:
./all.bash
env: bash: No such file or directory
Also wenn ich den Pfad festlegen, kann es das Programm im Verzeichnis nicht finden. Dies deutet darauf hin, dass Runtime.getRuntime(). Exec() aufgerufen wird, überschreibt es $ PATH als das Verzeichnis, das ich übergeben habe, und überschreibt dann die Umgebungsvariablen, die ich ihm gegeben habe. Aber damit ./all.bash funktioniert, müssen beide Pfade in der Variablen $ PATH enthalten sein. Wie kann ich das machen?
Unter Mac OS X 10.11.6.
'envp' ist Variablen nicht in die Umwelt hinzuzufügen, es Variablen ist, die Umwelt gesetzt. Andere als die von Ihnen angegebenen Variablen werden dem Prozess nicht zur Verfügung gestellt. ** Sie ** überschreiben PATH. –
Oh ok. Wenn ich möchte, dass es ./all.bash auch in dem Verzeichnis, das ich ihm gebe, ausführen kann, muss ich dieses Verzeichnis zu $ PATH hinzufügen? Wie "PATH =/usr/bin: $ HOME/Desktop/gehen/src"? Oder so etwas, weil das den gleichen Fehler bekommt. – user1914745
Wahrscheinlich am einfachsten, nur Ihren Weg zu bekommen und es durch 'System.getenv(). Get (" PATH ")' –