Кавычки в командной строке

Я пытаюсь сделать плагин знатока для LFTP, и это включает призыв программы командной строки LFTP из моего JAVA-приложения.

Однако, я неспособен заставить его обрабатывать мой переданный в командах, используя одинарные кавычки, двойные кавычки, espcaped единственный/двойные кавычки.

Что я имею для кода, до сих пор:

final String command = "lftp -e 'set ftp:ssl-protect-data true; put -O /data/upload/ src/test/resources/test-file.txt; bye' -u username,password -p 21 192.168.1.100"
final CommandLine cmdLine = CommandLine.parse(command.toString());
final DefaultExecutor executor = new DefaultExecutor();
executor.setWorkingDirectory(new File(baseDir));
final int result = executor.execute(cmdLine);

И что, ища предложения на том, что попробовать затем.

Edit #1: I have attempted to utilize org.apache.commons.exec.CommandLine and as a pre-done String but it results in the following error:

Unknown command `set ftp:ssl-protect-data true; put -O /data/upload/ src/test/resources/test-file.txt; bye'.
Exception in thread "main" org.apache.commons.exec.ExecuteException: Process exited with an error: 1 (Exit value: 1)
    at org.apache.commons.exec.DefaultExecutor.executeInternal(DefaultExecutor.java:377)
    at org.apache.commons.exec.DefaultExecutor.execute(DefaultExecutor.java:160)
    at org.apache.commons.exec.DefaultExecutor.execute(DefaultExecutor.java:147)
    at org.welsh.build.automation.lftp.plugin.TestClass.main(TestClass.java:30)

Но когда я распечатываю произведенную команду и пробег, что вручную это хорошо работает.

Edit #2: Added some more clarity.

1
nl ja de
Isn' t там какой-то исполнитель, который берет множество последовательностей как аргумент вместо единственной последовательности?
добавлено автор fge, источник
@baba I don' t думают, что это связано, с тех пор здесь, это - вопрос выполнения внешней команды
добавлено автор fge, источник
@baba, который является не вопросом вообще. Вопрос здесь состоит в том, чтобы иметь способность призвать команду с отдельными аргументами. Палата-общин-cli ничего не сделает , для которого, так как кавычки и т.д. обработаны раковина .
добавлено автор fge, источник
@LeeMeador, именно это я пытался сказать ему;)
добавлено автор fge, источник
@babe LeeMeador и Fge правильны в их предположении. Я пытаюсь призвать программу LFTP из своей явской программы. Проблема, когда я печатаю свою команду, которая производится или из CommandLine или как предварительно сделанная Последовательность, это работает в Командной строке посредством ручного выполнения, но won' t работают из моей Явской Программы.
добавлено автор Welsh, источник
@baba я думаю he' s пытающийся выполнить внешнюю команду из его программы и не написать программу с этим принимает параметры командной строки.
добавлено автор Lee Meador, источник
Смотрите на этот вопрос: stackoverflow.com/questions/1200054/…
добавлено автор Nikola Yovchev, источник
Внешний @fge или нет, используя солнце API' s не рекомендуется. Именно поэтому лучшая библиотека как палата общин Cli может сделать чудеса по сравнению с попыткой вручную разобрать кавычки и одинарные кавычки с API устаревшим.
добавлено автор Nikola Yovchev, источник
@fge, конечно, если команда недействительна, никакая библиотека, поможет вам. Мое предложение валлийскому языку должно заставить команду работать над раковиной и затем выполнить его с библиотекой неустаревшей, как палата общин Cli.
добавлено автор Nikola Yovchev, источник

2 ответы

Должностное лицо палаты общин подчеркивает, что легче иметь дело с CommandLine случаи, строя с приращением:

final CommandLine cmdLine = new CommandLine("lftp");
cmdLine.addArgument("-e");
cmdLine.addArgument("set ftp:ssl-protect-data true; put -O /data/upload/ src/test/resources/test-file.txt; bye");
...
executor.execute(cmdLine);

Я не посмотрел на их анализатор командной строки, но если они не полностью доверяют ему, я не был бы, также.

4
добавлено
Никакие кавычки для набор и т.д.! (отредактированный это для вас)
добавлено автор fge, источник
I' ve попытался использовать это, но он произвел ошибку в моем редактировать. В посылании, которое, что должно быть заключено в кавычки, рассматривается как вторая команда и не, поскольку командует часть LFTP.
добавлено автор Welsh, источник

Здесь есть некоторые примеры:

апачское Должностное лицо палаты общин

Заметьте, что они не используют одинарную кавычку (') знаки, а скорее строят явскую последовательность с двойными кавычками, предшествуя характеру двойной кавычки с наклонной чертой влево.

Вот один пример, показывающий что:

String line = "AcroRd32.exe /p /h \"" + file.getAbsolutePath() + "\"";

Вот другой способ построить командную строку:

CommandLine cmdLine = new CommandLine("lftp");
cmdLine.addArgument("-e");
cmdLine.addArgument("set ftp:ssl-protect-data true; put -O /data/upload/ src/test/resources/test-file.txt; bye");
cmdLine.addArgument("-u");
cmdLine.addArgument("username,password");
cmdLine.addArgument("-p");
cmdLine.addArgument("21");
cmdLine.addArgument("192.168.1.100");
0
добавлено
pro.jvm
pro.jvm
3 503 участник(ов)

Сообщество разработчиков Java Scala Kotlin Groovy Clojure Чат для нач-их: @javastart Наш сайт: projvm.com projvm.ru Наш канал: @proJVM Вакансии: @jvmjobs Конфы: @jvmconf

Java & Co
Java & Co
2 370 участник(ов)

Можно обсуждать с матом и без всё, что касается жабы, вплоть до холиваров. НЕ ИМЕЕТ ОТНОШЕНИЯ К САЙТУ JAVARUSH.RU ПРАВИЛА - https://t.me/javarush/75723 Вакансии сюда - https://telegram.me/joinchat/B7IzvUCnfo6d8t3yIxKguQ По вопросам - @thedude

learn.java
learn.java
1 888 участник(ов)

Чат для начинающих и не только Статистика: https://combot.org/chat/-1001083535868 Основной чат - @jvmchat

Java Underground
Java Underground
169 участник(ов)

https://vk.com/javatutorial

Javanese Questions
Javanese Questions
109 участник(ов)

Чат предназначен для обмена знаниями строго в формате в вопрос-ответ. Тема — Java, Kotlin и Android. Вопрос должен быть предварительно прогуглен, понятно и грамотно сформулирован, помечен хэштегами. Ответ — тем более. Куски кода размером в несколько строк можно писать прямо здесь, для больших кусков кода стоит использовать http://gist.github.com/, http://pastebin.com/, https://codeshare.io/ или любой аналогичный сервис. В некоторых случаях можно прикреплять скриншоты. Стикеры и гифки запрещены. Дополнять и уточнять вопросы и ответы — редактированием исходного сообщения. Обсуждения должны приводить к редактированию вопроса/ответа и удаляться. По хештегам можно искать существующие вопросы и овтеты: #вопрос #ответ #git #generics #java #server #awt #javafx #swing #kotlin #anko #tornadofx #ktor #android #recyclerView #performance #arch #network #permissions #storage #async