Я использую StringBuilder для создания строки, а затем пытаюсь выполнить строку на терминале Linux. Но вместо выполнения всей команды он выполняет половину команды, а затем завершает ее. Это моя ява фрагмент кода:Выполнение Java-строки в терминале Linux
moteCommand.append("CFLAGS+=-DCC2420_DEF_CHANNEL=1");
moteCommand.append(" ");
moteCommand.append("make telosb install.");
moteCommand.append(moteIdList.get(i).toString());
moteCommand.append(" bsl,");
moteCommand.append(moteAddrList.get(i).toString());
String moteCommand2 = moteCommand.toString();
Process moteProgProcess = Runtime.getRuntime().exec(moteCommand2, null,"/opt/tinyos-2.x/apps/XXX/);
Это дает мне эту ошибку: Не удается запустить программу "CFLAGS + = - DCC2420_DEF_CHANNEL = 1" (в каталоге "/opt/tinyos-2.x/apps/xxx") : java.io.IOException: error = 2, Нет такого файла или каталога
Я не понимаю, почему системный процесс пытается выполнить только половину строки. Пожалуйста, дайте мне знать, если кто-нибудь знает причину.
Спасибо.
Не могли бы вы дать мне пример относительно моего кода? Поскольку я уже пытался использовать ProcessBuilder, как это, и он не работал. ProcessBuilder pb = new ProcessBuilder («CFLAGS + = - DCC2420_DEF_CHANNEL = 1», «make», «telosb», «install.0», «bsl,/dev/ttyUSB0»); moteProgProcess = pb.start(); –
Вы не делаете то, что я описал выше, поэтому он не работает. Фактически, вы используете его точно так же, как вы используете 'Runtime.exec()'. Откройте JavaDocs для ProcessBuilder, и вы получите хороший пример с параметрами среды и всеми: http://docs.oracle.com/javase/7/docs/api/java/lang/ProcessBuilder.html –
Обратите внимание, что ваш «myCommand» «не является« CFLAGS ..... », но это« make », то есть имя процесса, который вы хотите запустить. Вы 'CFLAGS ...' вещь является частью среды. –