Я знаю, что есть много сообщений о выполнении команд с Java, но я просто не могу заставить это работать. Вот что я пытаюсь сделать, у меня есть скрипт bash, он получает 2 аргумента, которые могут иметь или не иметь пробелов, а затем из Java Я выполняю скрипт и передаю такие аргументы (я окружаю аргументы с цитатами и избежать их с обратной косой чертой):Выполнять скрипт bash и передавать аргументы с пробелами из java
String cmd = "/opt/myScript \"/opt/myPath1\" \"/opt/myPath2 with spaces\"";
Runtime rt = Runtime.getRuntime();
rt.exec(cmd);
Я также попытался использовать ProcessBuilder
класс вроде этого:
String myScript = "/opt/myScript";
String myArg1= "/opt/myPath1";
String myArg2 = "/opt/myPath2 with spaces";
ProcessBuilder pb = new ProcessBuilder(myScript , myArg1, myArg2);
pb.start;
Аргументы без пробелов принимаютс успешно, но я до сих пор есть проблемы со вторым ,
Я думал, что класс ProcessBuilder
будет обрабатывать пробелы, но похоже, что я что-то пропустил.
Я не уверен, если это что-то делать, но только в том случае, вот мой сценарий:
#!/bin/bash
PATH=$PATH:$1
gnome-terminal --working-directory $2
$1
и $2
аргументы, посланные из Java.
Какая у вас проблема? Какие значения получает ваш скрипт с помощью «ProcessBuilder»? –
Вы также должны процитировать расширение переменных в сценарии оболочки. В противном случае оболочка будет разбита словом на пространства. (Технически, это не будет делать это на линии назначения, но цитирование там безопаснее, если вы хотите быть уверенным.) –
Возможно дубликат http://stackoverflow.com/questions/17141767/having-spaces-in-runtime -getruntime-exec-with-2-executables –