Java Apache Commons CLI в Unix; › рассматривается как аргумент исполняемого файла, а не как перенаправление

Я пытаюсь автоматизировать некоторые тесты командной строки в Windows и Unix. Для этого я использую Java 1.6 и Apache Commons CLI 1.1. Что я делаю в коде Java, так это создаю команду, которую я хочу запустить, используя метод addArgument Apache Commons CLI. После создания командной строки, которую я хочу запустить, я хотел передать вывод команды в файл, поэтому я добавил следующее в конец команды.

cloudscan_cmdl.addArgument(">");
cloudscan_cmdl.addArgument(cloudscanOutputFilename);

Где cloudcanOutputFilename — это строка, содержащая имя файла, которое я хочу использовать. Это отлично работает в Windows, команда создается, добавляются два перенаправленных аргумента, и файл создается нормально. Однако в Unix он обрабатывает > и строку имени файла как дополнительные аргументы для исполняемого файла, а не как перенаправление.

Что я могу сделать, чтобы Unix читал эту команду, как если бы она была набрана прямо в командной строке? Я вывел команду в виде строки, скопировал и вставил ее в Unix, и она работает, как и ожидалось, но при запуске из программы Java перенаправление обрабатывается неправильно.

Я пробовал использовать версию метода addArgument(string, boolean) как истинную, так и ложную, и ни одна из них не помогает. Это серьезно сводит меня с ума.


person drusolis    schedule 26.04.2012    source источник


Ответы (2)


Вы неверно истолковываете цель класс. Как уже говорилось, это для «указания процессов для выполнения». Это помогает вам передать список аргументов в программу. Это не для того, чтобы сказать оболочке, что делать. > — это оператор перенаправления, реализованный оболочкой. Тот факт, что он работает в Windows, — это случайность.

Также обратите внимание, что это часть Apache Commons Exec, а не интерфейс командной строки Apache Commons.

Чтобы не выполнять перенаправление самостоятельно, лучшим вариантом может быть создание простого пакетного файла или сценария оболочки для каждой платформы и его вызов.

person Matthew Flaschen    schedule 26.04.2012

Побег >, например.

cloudscan_cmdl.addArgument("\>");
person Satya    schedule 26.04.2012