Runtime.exec(): cygwin vs Linux

Убил несколько часов на разбирательство с простым на первый взгляд кодом:

String command = "bash -c 'ls > ls.txt'";
Process p = Runtime.getRuntime().exec( command, null, null );

С cygwin всё работает как надо: создается файл ls.txt с результатами работы ls.

Зато под Linux происходит странное:

>: -c: line 0: unexpected EOF while looking for matching `''
>: -c: line 1: syntax error: unexpected end of file

Полный откомпилированный пример здесь. Можете запустить командой 'java ExecRedirect' на своей системе.

Ну что, рассказать решение или сами подумаете? 🙂


Нечасто приходится использовать Runtime.exec(), пришлось поизучать материальную часть: When Runtime.exec() won’t.

Runtime.exec() не умеет правильно парсить команды с редиректом. Сделаем это за нее:

Process p = Runtime.getRuntime().exec
            ( new String[]{"bash","-c","ls > a.txt"}, null, null );

23.10.2007  Метки: , ,   Рубрики: Разработка

Написать комментарий