Используя Кавычки в getRuntime () .exec

Инициализация двойной скобки создает анонимный класс, полученный из указанного класса (внешние фигурные скобки external ) и предоставляет блок инициализации внутри этого класса (скобки inner ). например,

new ArrayList<Integer>() {{
   add(1);
   add(2);
}};

Обратите внимание, что эффект от использования этой инициализации двойной скобки заключается в том, что вы создаете анонимные внутренние классы. Созданный класс имеет неявный указатель this к окружающему внешнему классу. Хотя обычно это не проблема, это может вызвать горе в некоторых обстоятельствах, например. при сборке или сборе мусора, и это стоит знать об этом.

22
задан Andrew Thompson 4 July 2012 в 05:17
поделиться

6 ответов

Используйте это:

Runtime.getRuntime().exec(new String[] {"sh", "-l", "-c", "./foo"});

Основной момент: не вставляйте двойные кавычки. Это только используется при записи командной строки в оболочке!

, например, echo "Hello, world!" (как введено в оболочке) переводится в:

Runtime.getRuntime().exec(new String[] {"echo", "Hello, world!"});

(Просто забывают в настоящий момент, что оболочка обычно имеет встроенное для echo, и звонит /bin/echo вместо этого.:-))

47
ответ дан Chris Jester-Young 29 November 2019 в 03:51
поделиться

Командные строки Windows по-другому по сравнению с UNIX, Mac OS X и GNU/Linux.

В Windows процесс получает входной текст, как после executeable имени (и пространство). Тогда до программы для парсинга командной строки (обычно делается неявно и программист часто невежествен).

В GNU/Linux оболочка обрабатывает командную строку и gnereates, который знакомый массив строк передал основному C. У Вас нет той оболочки. Лучший подход (даже в Windows) должен использовать форму должностного лица, куда Вы передаете каждый параметр командной строки индивидуально в его собственной Строке.

можно получить оболочку к парсингу для Вас, если Вы действительно хотели. Который сделал бы Вас взглядом в качестве примера что-то как (непротестированный):

Runtime.getRuntime().exec(new String[] {
    "sh", "-c", "sh -l -c \"echo foo; echo bar;\""
});
9
ответ дан Tom Hawtin - tackline 29 November 2019 в 03:51
поделиться

EOF НЕ является символом, таким образом, нет никакого способа записать EOF. Вы забыли закрывать заключенную в кавычки строку.

4
ответ дан Lev 29 November 2019 в 03:51
поделиться

Причина для этой ошибки наиболее вероятна недостающий маркер синтаксиса, который ожидает удар, но строка, Вы передаете концы перед ударом, встретилась с ним. Ищите IFS, четверки и т.д., которые не имеют никакого закрытия fi или сделанный.

0
ответ дан 29 November 2019 в 03:51
поделиться

Кавычек нужно оставить когда в строке. Вместо того, чтобы писать "запись \".

, Например,

strcpy (c, "Это - строка \"с \" кавычки");

0
ответ дан diciu 29 November 2019 в 03:51
поделиться

на вашем месте я записал бы содержание строки к временному файлу bashfile и видел бы, выполняет ли удар это без какой-либо ошибки. Если бы это выполняется без ошибки, то я рассмотрел бы отладку далее;

0
ответ дан anjanb 29 November 2019 в 03:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: