Frage

Unter OS X, ich versuche, etwas zu .exec, aber wenn ein Pfad ein Leerzeichen enthält, funktioniert es nicht. Ich habe versucht, den Pfad mit Anführungszeichen umgeben, Flucht aus dem Raum und sogar \ u0020 verwendet wird.

Zum Beispiel, das funktioniert:

Runtime.getRuntime().exec("open /foldername/toast.sh");

Aber wenn es ein Raum, keines dieser Arbeit:

Runtime.getRuntime().exec("open /folder name/toast.sh");

Runtime.getRuntime().exec("open \"/folder name/toast.sh\"");

Runtime.getRuntime().exec("open /folder\\ name/toast.sh");

Runtime.getRuntime().exec("open /folder\u0020name/toast.sh");

Ideen?

Edit:. Entkommen Backslash ... noch keine worky

War es hilfreich?

Lösung

Es gibt eine Zusammenfassung dieses Problem auf Sun Foren ... scheint OS X.

ein ziemlich häufiges Problem nicht auf diese beschränkt zu sein

Der letzte Eintrag in dem Thread fasst die vorgeschlagene Lösung. Im Wesentlichen in der folgenden Form von Runtime.exec, die eine String[] Array nimmt:

String[] args = new String[] { "open", "\"/folder name/toast.sh\"" }; 

oder (das Forum schlägt vor, dies wird auch funktionieren)

String[] args = new String[] { "open", "folder name/toast.sh" };

Andere Tipps

Versuchen Sie folgendes:

Runtime.getRuntime().exec("open /folder\\ name/toast.sh");

„\“ wird einen Raum nur in der Zeichenfolge setzen, aber „\“ wird legt eine „\“ in der Zeichenfolge, die an der Shell übergeben werden, und die Schale wird den Raum entweichen kann.

Wenn das nicht funktioniert, übergibt in den Argumenten als Array, ein Element für jedes Argument. Auf diese Weise die Schale nicht einlassen, und Sie brauchen nicht bizarr entkommen.

Runtime.getRuntime().exec(new String[]{"open", "/folder name/toast.sh"});

Paul Option funktioniert, aber Sie müssen noch die Räume entweichen etwa so:

Runtime.getRuntime().exec(new String[]{"open", "/folder\\ name/toast.sh"});

Die Sache, die über die Verwendung ein String-Array saugt ist, dass jeder param und seine Option in ihrem eigenen Elemente sein muss. Zum Beispiel können Sie dies nicht tun:

Runtime.getRuntime().exec(new String[]{"executable", "-r -x 1", "/folder\\ name/somefile"});

Aber stattdessen muss es wie so angeben:

Runtime.getRuntime().exec(new String[]{"executable", "-r", "-x", "1", "/folder\\ name/somefile"});
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top